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));
输出: 在上述程序中,函数被存储为对象中的一个变量。
"100 + 100 = 200"
"100 - 7 = 93"
"5 * 5 = 25"
"100 / 5 = 20"
高阶函数
将另一个函数作为参数接收或返回一个新函数或两者都具备的函数被称为高阶函数。高阶函数的存在是因为具备了头等函数(First-class function)的特性。
让我们通过一些示例来更好地理解:
示例1
返回另一个函数的函数。
const greet = function(name){
return function(m){
console.log(`Hi!! {name},{m}`);
}
}
const greet_message = greet('ABC');
greet_message("Welcome To GeeksForGeeks")
注意: 我们也可以这样调用函数: greet(‘ABC’)(‘Welcome To GeeksForGeeks’) , 它将产生相同的输出。
输出:
Hi!! ABC, Welcome To GeeksForGeeks
示例2
将函数作为参数传递。
function greet(name){
return `Hi!! {name} `;
}
function greet_name(greeting,message,name){
console.log(`{greeting(name)} ${message}`);
}
greet_name(greet,'Welcome To GeeksForGeeks','JavaScript');
Note : 我们作为参数传递给另一个函数的函数被称为回调函数。
Output:
Hi!! JavaScript Welcome To GeeksForGeeks
注意: filter()、map()、reduce()、some()等函数都是高阶函数的示例。
一级函数和高阶函数的主要区别:
| 一阶函数 | 高阶函数 |
|---|---|
| 函数被视为一个可以赋值给任何其他变量或作为参数传递的变量。 | 函数作为参数接收另一个函数,或返回一个新的一阶函数,或两者兼有。 |
| “一等公民”概念只涉及编程语言中的函数。 | “高阶”概念可以应用于一般的函数,如数学意义上的函数。 |
| 一阶函数的存在意味着高阶函数的存在。 | 高阶函数的存在并不意味着一阶函数的存在。 |
极客教程