我在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。