【问题标题】:Higher-Order Functions in JSJS 中的高阶函数
【发布时间】:2016-02-27 16:59:41
【问题描述】:

我现在正在学习 JavaScript。我有一些问题。以下代码来自 Eloquent JavaScript 一书:

function forEach(array, action) {
    for (var i = 0; i < array.length; i++)
        action(array[i]);
}

var numbers = [1, 2, 3, 4, 5],
    sum = 0;

forEach(numbers, function(number) {
    sum += number;
});

console.log(sum); 

这段代码发生了什么? forEach 函数在调用时如何确定数字是多少?它是如何从数字数组中提取数字的?

【问题讨论】:

  • 就在这里:action(array[i]); - 调用从数组中传递元素的操作。

标签: javascript higher-order-functions


【解决方案1】:

这段代码发生了什么?

以下是您的 forEach 函数如何工作的说明:

  1. forEach 函数接受两个参数,数组和函数
  2. 它设置了一个for 循环来遍历数组
  3. 然后,对于数组中的每个元素,它调用action(array[i]),后者调用传入的函数并将一个数组元素传递给它。 array[i] 从数组中获取下一项,action(array[i]) 调用传入的函数并将数组中的下一项传递给它。

那么,当你这样称呼它时:

forEach(numbers, function(number) {
    sum += number;
});

它将为numbers 数组中的每个数字调用一次您传递给它的函数,当它调用该函数时,它会将数组中的一个数字作为第一个参数传递给您的函数。

让一些人感到困惑的是,您传递给forEach 的函数中的number 参数只是您分配给函数第一个参数的名称。它可以任意命名,与forEach() 函数定义中使用的任何名称无关。函数参数的声明只是分配给每个参数的标签,使您更容易使用它们。你也可以这样做:

forEach(numbers, function(whateverYouWant) {
    sum += whateverYouWant;
});

forEach 函数在调用时如何确定什么是 号码?

您的for 循环一次遍历整个数组一个数字,并为数组中的每个数字调用一次回调函数。

它如何从数字数组中提取数字?

array[i] 是从数组中提取数字的位置。这是正常的数组索引,用于从数组中检索第 i 个值,其中 i 的变化范围从 0 到数组的长度减 1。

【讨论】:

  • @K-Kropchatov - 这回答了你的问题吗?如果是这样,请通过单击答案左侧的绿色复选标记向社区表明这一点。如果没有,请说明您仍需要帮助的地方。
猜你喜欢
  • 2016-05-07
  • 2012-09-28
  • 2011-07-16
  • 2021-02-01
  • 2023-03-18
相关资源
最近更新 更多