【问题标题】:Can't understand how array's elements are passed to a function's argument无法理解数组的元素如何传递给函数的参数
【发布时间】:2015-07-19 23:50:26
【问题描述】:

我有一个我能理解的功能。

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

当我们调用该函数时,让我们说forEach([1,2,3,4,5], console.log); 该代码将正文中的单词 action 替换为单词 console.log。一切都像一个魅力。对吧?

但在这种情况下,我对匿名函数感到困惑。

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

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

在这种情况下,我们有一个匿名函数作为参数。匿名函数如何从数组numbers中一个一个地取出元素,并将其放入它的参数(number)中?

我可以让它更容易理解:

var FindSum = function (number) {
  sum += number;
};

forEach(numbers, FindSum);

但我仍然对参数编号感到困惑。 FindSum函数如何接收数字?

【问题讨论】:

  • 我不确定你在问什么,但是下面的最终代码是有效的
  • 我在问代码如何理解数组的元素应该放在参数号内。
  • 这两种情况几乎相同。在这两种情况下,您都传递了一个函数引用。在第一个中,您传递主机方法的名称 (console.log),在第二个中,您传递一个函数表达式(如果需要,可以有一个名称),所以唯一有对它的引用是 forEach 函数的 action 参数。除此之外,一切都一样。

标签: javascript arrays foreach


【解决方案1】:

和第一个例子完全一样:

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

所以number就是numbers[i]

var numbers = [1,2,3];
var FindSum = function (number) {
  sum += number;
};

forEach(numbers, FindSum); // equals FindSum(1); FindSum(2); FindSum(3); 

【讨论】:

  • 我真正不明白的是数字如何变成数字的过程[i]。 ://
  • 在你的forEach方法中,你循环遍历numbersarray,然后用numbers[i]/array[i]调用FindSum的动作。
【解决方案2】:
var numbers = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers, function(number) { sum += number; });

用非常简单的方式解释:

  1. forEach 接受一个数组(数字)和一个回调函数(匿名,也可以命名)

  2. forEach 然后将数字中的每个数字传递给匿名函数

  3. 然后将“sum”与数字的当前值相加

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多