我正在深入研究Javascript回调和内容。我来到了forEach()函数。函数说明了这一切,循环遍历列表中的每个对象。
当我查看documentation时,我会看到以下语法:
arr.forEach(callback[, thisArg])
文档还提到了参数
currentValue
index
array
我偶然发现了一个简单的forEach实现示例:
var friends = ["Mike", "Stacy", "Andy", "Rick"];
friends.forEach(function (eachName, index){
console.log(index + 1 + ". " + eachName);
});
这给了我明显的输出:
"1. Mike"
"2. Stacy"
"3. Andy"
"4. Rick"
我可以忍受关于一切的行为及其给出的结果,但我想知道为什么这有效并且我对此感到困惑
...function (eachName, index)...
每个名称和索引何时何地或如何填充正确的值?或者我如何才能看到 forEach 是如何实现的,因为我猜这个人在这里做了什么?或者我在这里错过了一个重要的概念?
答案 0 :(得分:2)
在您提供的link to MDN中,您会找到答案:
三个参数(currentValue, index, array
)是回调函数(arr.forEach(callback[, thisArg]
)的参数。要在您的示例中显示它:
var friends = ["Mike", "Stacy", "Andy", "Rick"];
friends.forEach(function (currentValue, index){
console.log(index + 1 + ". " + currentValue);
});
因此,当运行forEach时,会发生很多事情(have a look at the polyfill on the MDN page),但在某些时候,forEach将遍历数组中的项并使用上面提到的参数调用您提供的回调。简化版将是:
Array.prototype.forEach = function(callback, thisArg) {
// ...
for(let i = 0; let i < this.length; i++) { // "this" refers to your array here
// Here the arguments are passend in:
// currentValue = this[i]
// index = i
// array = this
callback.call(thisArg, this[i], i, this);
}
// ...
};
答案 1 :(得分:1)
这是实际.forEach()
实施的简化,只是为了给出正在发生的事情的基本概念。
Array.prototype.forEach = function( callback ) {
for( var i = 0; i < this.length; ++i ) {
callback( this[i], i, this );
}
};
基本上它遍历数组并在每次迭代时使用正确的参数调用函数。
实际的实现是引擎特定的,并且(很可能)不是本机JavaScript。