将函数传递给另一个函数时的高阶函数说明
High order functions explanation when passing a function to another function
我需要帮助逐行分解这个例子中发生的事情(摘录自Eloquent Javascript):
我们有forEach函数,它记录数组中的每个项。我明白这是怎么回事。
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
因此,我们有一个名为"numbers"的数组,另一个称为"sum"的变量设置为0。当"function(number)"被传递到操作参数中时,我会迷失方向。它做什么?它是如何工作的?我看不出它有什么价值。有人能把它分解一下吗?
var numbers = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers, function(number) {
sum += number;
});
console.log(sum);
// → 15
我认为您没有掌握调用的语法结构。一个人同样可以写
var numbers = [1, 2, 3, 4, 5];
var sum = 0;
function addToSum(number) {
sum += number;
}
forEach(numbers, addToSum);
我希望这里发生的事情很清楚。我们有一个函数addToSum
,并将该函数传递给forEach
函数-在那里我们用它的参数名称action
来引用它,并将用循环主体中传递的数组的每个元素来调用它:action(array[i])
。这种抽象的最大之处在于,我们可以将任何任意函数传递给forEach
…
那么,现在这种奇怪的语法是什么呢?首先,它将函数声明替换为函数表达式。函数表达式只是计算为函数对象的表达式,就像数组文字[1, 2, 3, 4, 5]
计算为数组对象一样。它也被称为匿名函数,因为它没有名称。我们取这个值并将其分配给一个变量:
var numbers = [1, 2, 3, 4, 5];
var sum = 0;
var addTosum = function(number) {
sum += number;
}
forEach(numbers, addToSum);
直到现在一切都没有真正改变。现在,我们为什么需要这个变量?我们并不真正需要那些指向我们用表达式创建的值的标识符。我们现在只需将表达式直接放在forEach
函数调用中,仍然传递相同的值(forEach
没有发现差异):
var sum = 0;
forEach([1, 2, 3, 4, 5], function(number) {
sum += number;
});
相关文章:
- JavaScript 中的高阶函数
- 避免在JS中重复使用高阶函数
- 回调和高阶函数Javascript
- 什么's将命名函数传递给Javascript的正确方法's的高阶函数
- Javascript如何使用高阶函数和Map/Reduce函数来汇总多个数组
- 使用JavaScript中的高阶函数概念,用Python编写纯函数代码
- 在高阶函数 JavaScript 中传递参数
- 如何在 Javascript 中使用高阶函数反转数组
- Eloquent JavaScript,第 2 版,第 5 章高阶函数
- JS中的高阶函数
- GHCJS:如何使用 FFI 导入高阶 JavaScript 函数
- 这个高阶函数有什么问题
- 如何在 Indesign 脚本中使用像 Array.reduce() 这样的高阶函数
- 此函数如何修改另一个函数?(高阶函数)
- 在es6类中从高阶函数中定义一个方法
- 将其绑定到高阶函数中的原始对象
- 高阶函数中的Javascript对象克隆
- 通过更改起始索引并使用Javascript中的高阶函数递增2来操作2D数组
- 将函数传递给另一个函数时的高阶函数说明
- 了解Javascript中的高阶函数