【发布时间】:2014-06-17 21:49:08
【问题描述】:
我遇到了一些我无法完全理解的代码。原则似乎很清楚,但我对在 forEach 函数调用中声明的第二个参数有一些困难。显然匿名函数是通过 action 参数传递给 forEach 的,但是在 for 循环中它究竟是如何工作的呢?
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); // 15
我认为最让我困惑的是匿名函数的语法似乎与action(array[i]) 不兼容 - 我的意思是,我知道sum 获取数组的每个值转,但如果函数“替换”action 参数,(array[i]) 部分如何以及在哪里适合?
【问题讨论】:
-
我对你的困惑感到困惑。
forEach函数接受两个参数,第二个参数需要是对函数的引用(任何函数 - 命名的、匿名的,等等)...你传递一个匿名函数。在forEach函数内部,它声明了action参数......并且由于它应该持有对函数的引用,并且您可以调用函数,因此您可以调用action。调用action调用您传递的任何第二个参数。它用一个参数(array[i])调用它,它可以用作你传递的函数中的number参数 -
@Ian - 谢谢。我知道我有不能很好地解释自己的危险,但你已经帮助澄清了一些事情。我把它看作是整个 anon 函数都保存在 action 变量中,而不是对它的引用。因此,
(array[i])似乎会继承该函数,而不是充当其参数。
标签: javascript arguments