JavaScript中一级函数和高阶函数的区别

一阶函数

如果一种编程语言中的函数被当作其他变量对待,那么该语言就被称为一阶的函数。因此,这些函数可以被分配给任何其他变量或作为参数传递,也可以被另一个函数返回。
JavaScript将函数视为一等公民。这意味着,函数只是一个值,只是另一种类型的对象。

让我们举个例子来进一步了解一阶函数的含义。

const Arithmetics = {
    add:(a, b) => {
        return `${a} + ${b} = ${a+b}`;
    },
    subtract:(a, b) => {
        return `${a} - ${b} = ${a-b}`
    },
    multiply:(a, b) => {
        return `${a} * ${b} = ${a*b}`
    },
    division:(a, b) => {
        if(b!=0) return `${a} / ${b} = ${a/b}`;
        return `Cannot Divide by Zero!!!`;
    }

}

console.log(Arithmetics.add(100, 100));
console.log(Arithmetics.subtract(100, 7));
console.log(Arithmetics.multiply(5, 5));
console.log(Arithmetics.division(100, 5));

高阶函数

一个接收另一个函数作为参数或返回一个新函数或两者都有的函数被称为高阶函数。高阶函数只有在第一类函数的基础上才能实现。

让我们举一些例子来更好地理解。

例1: 返回另一个函数的函数

const greet = function(name){
    return function(m){

        console.log(`Hi!! ${name}, ${m}`);
    }
}

const greet_message = greet('ABC');
greet_message("Welcome To Yiibai.com")

注意:也可以这样调用该函数:greet('ABC')('Welcome To Yiibai.com'),它也会给出同样的输出。

示例2:传递 函数 作为参数。

function greet(name){
    return `Hi!! ${name} `;
}

function greet_name(greeting,message,name){
    console.log(`${greeting(name)} ${message}`);
}

greet_name(greet,'Welcome To Yiibai.com','JavaScript');

注:诸如filter()map()reduce()some()等函数,都是高阶函数的例子。

一阶函数和高阶函数的主要区别:

一阶函数 高阶函数
函数被视为一个变量,可以被分配给任何其他变量或作为参数传递。 函数接收另一个函数作为参数,或返回一阶函数,或两者都是。
“高阶”概念只与编程语言中的函数有关。 “高阶”概念可以应用于一般的函数,就像数学意义上的函数。
一阶函数的存在,意味着高阶函数的存在。 高阶函数的存在并不意味着一阶函数的存在。