1

我试图了解如何根据Eloquent Javascript书中的示例确定number变量。

当我输出数字时,我可以看到它随着循环的进行而增长,但我看不到数字变量的实际设置位置。

(注意:对于任何了解 Eloquent Javascript 的人,我已将 show() 函数更改为 alert())

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

function sum(numbers) {
  var total = 0;
  forEach(numbers, function (number) {
    total += number;
  });
  return total;
}
alert(sum([1, 10, 100, 1000]));
4

3 回答 3

2

它设置在代码的一半左右:

forEach(numbers, function (number) {

或者更确切地说,当调用该匿名函数时:

action(array[i]);

(因为该函数已作为action参数传递给该forEach函数。

于 2012-08-06T11:39:58.673 回答
1
forEach(numbers, function (number) {
    total += number;
  });

这部分number取自当前的numbers,相当于:

for (var i = 0; i < numbers.length; i++) {
  var number = numbers[i];

  function (number) {
    total += number;
  }
}
于 2012-08-06T11:40:48.653 回答
1

一旦您了解更多forEach方法签名,这一点就很明显了。

从你的代码

function sum(numbers) 
{   var total = 0;     
    forEach(numbers, function (number) {       
        total += number;     
    });     
return total;   
}   

alert(sum([1, 10, 100, 1000]));   

那么你需要知道该ForEach方法有两个参数:

  1. 第一个是要迭代的数组,
  2. 第二个是要针对当前数组项引发的委托……该函数将为数组的每个项调用。

这意味着function (number) { ... }将为提供的数组的每个项目调用具有一个名为 number ()的参数的声明函数[1, 10, 100, 1000],并且 number 将设置为这些值中的每一个。

希望这可以帮助

于 2012-08-06T11:48:18.617 回答