Javascript forEach回调

时间:2015-10-27 13:22:35

标签: javascript foreach

我正在深入研究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 是如何实现的,因为我猜这个人在这里做了什么?或者我在这里错过了一个重要的概念?

2 个答案:

答案 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。