Javascript中回调函数内的参数

dar*_*ght 5 javascript

让我们考虑一下Javascript的每个方法:

var friends = ["Mike", "Stacy", "Andy", "Rick"];

friends.forEach(function (eachName, index){
  console.log(index + 1 + ". " + eachName);
});
Run Code Online (Sandbox Code Playgroud)

有人可以解释paraName eachName和index来自何处,因为它们没有在代码中的任何地方定义.

我理解这对许多人来说可能很明显,但我无法理解这个概念.

Leo*_*eon 4

您应该阅读有关 forEach 的文档。数组中的每个元素都会调用 forEach 中声明的函数。forEach 将调用内部函数,将数组项的值作为第一个函数参数,将数组项的索引作为第二个函数参数。

因此,forEach 将迭代数组,类似于 for 循环,对于数组中的每个项目,它将获取值和索引并将其传递给声明的函数。

您的困惑很可能来自参数名称,但这些名称可以是任何名称。第一个参数始终是当前项目数组值,第二个参数是索引。

要编写自己的函数,您需要创建一个调用已定义函数的 for 循环。

如果我们查看您的原始代码并提取该函数(这对于测试顺便说一句很有用)。

var friends = ["Mike", "Stacy", "Andy", "Rick"];

function doStuff(eachName, index){
  console.log(index + 1 + ". " + eachName);
}    

// Does is still the same as yours
friends.forEach(doStuff);

// This loop does exactly what a forEach polyfill would do
for(var i = 0; i < friends.length; i++) {
    doStuff(a[i], i);
}
Run Code Online (Sandbox Code Playgroud)

查看 MDN foreach polyfill 以获得完整的示例。