我在CodeSchool上学习。在观看教程时,我为一个例子感到困惑。他们试图在视频中解释的是,循环创建的闭包直到最后一分钟才绑定。此代码的目的是对数组中的名称进行检查,然后仅返回名称及其位置(不使用零约定)。由于闭包直到最后一分钟才绑定,因此此代码返回z 5。我很困惑为什么这段代码返回5而不是4。我的数组的长度是4,for循环在4之前停止,因为i < passengerArray.length等于i < 4,因此最后检查的索引应该是,这意味着我的passengerArray[3]最后应该是4,而不是5。我希望这是有道理的。这整天困扰着我。

function assignTorpedo(name, passengerArray)
{var torpedoassignment;
for(var i = 0; i < passengerArray.length; i++){
    if(passengerArray[i] == name){
        torpedoAssignment = function(){
            console.log(name + " " + (i+1));
        };
    }
}
return torpedoAssignment;
}

var give = assignTorpedo("z",["z","a","b","c"]);

give();

最佳答案

当测试条件失败时,for循环结束。为什么会失败?因为i不小于4;它等于4。因此,在console.log()输出中看到5。

另外,声明


  在循环中创建的闭包直到最后一分钟才绑定。


是描述事物运作方式的一种奇怪方法。在数组中找到名称后,便会立即为变量分配对构造函数的引用。当assignTorpedo返回该值时,闭包存在。在闭包中,变量“ i”的值已经为4。

09-19 10:46