JavaScript中回调函数内部的参数

时间:2018-07-26 22:49:53

标签: javascript

让我们考虑一下Java的forEach方法:

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

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

由于代码中未定义参数eachName和index的含义,因此请解释一下。

我知道这对许多人来说可能是很明显的,但是我无法理解这个概念。

1 个答案:

答案 0 :(得分:4)

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

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

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

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

如果我们查看您的原始代码并提取该功能(这对测试BTW很有用)。

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);
}

请查看每个polyfill的MDN以获取完整示例。