我无法理解下面的代码。我来自Java背景。我该怎么看?有没有好的Java>我应该看看Javascript书籍/教程?
function sum(numbers) {
var total = 0;
forEach(numbers, function (number) {
total += number;
});
return total;
}
show(sum([1, 10, 100]));
摘自http://eloquentjavascript.net/chapter6.html
我正在查看forEach(数字,函数(数字)...代码。匿名函数从哪里获取'数字'?
答案 0 :(得分:5)
查看forEach
的来源:
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
forEach
接受两个参数:一个数组和一个回调(即一个函数)。您可以看到它在循环中调用回调,每次都将“当前”数组元素作为参数传递给它。这就是回调的形式参数number
的内容。
换句话说 - 你可以很容易地理解这一点:
function hello(what) {
alert("Hello " + what);
}
hello("world");
如果您使用hello
作为回调,则会得到与您展示的代码非常相似的代码:
function say(callback, what) {
callback(what);
}
say(hello, "world");
<强> See it in action 强>
最后,您可能会受益于检查回调如何工作以及它们的用途; here是我在这个问题上的另一个答案。
答案 1 :(得分:2)
从数字中获取数字。 foreach所说的是,对于数字中的每个元素,使用该元素调用匿名函数。然后该元素被称为数字,但它可以被称为任何东西。
答案 2 :(得分:1)
你感到困惑的是你没有看到forEach的底层机制...如果你打开它你会看到该函数需要一个匿名函数作为它的第二个参数,它将它需要的任何东西传递给IT。所以你可以期望在运行你的函数时填充parm。当你用不同的语言来表达它时,它肯定是不和谐的,但你必须相信事物的运作方式与它们的工作方式相同。