- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 CodeSchool 上做了一些研究。在观看教程时,我对一个示例感到困惑。他们在视频中试图解释的是,在循环中创建的闭包要到最后一刻才会绑定(bind)。此代码的目的是在数组中对其进行名称检查,并单独返回名称及其位置(没有零约定)。由于闭包直到最后一刻才绑定(bind),因此此代码返回 z 5
.我很困惑为什么这段代码返回的是 5 而不是 4。我的数组长度是 4,for 循环在 4 之前停止,因为 i < passengerArray.length
相当于i < 4
因此最后检查的索引应该是 passengerArray[3]
这意味着我的 (i+1)
最后应该是 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。
还有声明
closures created in loops won't bind until the last minute.
是一种描述事物运作方式的奇怪方式。一旦在数组中找到该名称,就会为该变量分配一个对构造函数的引用。当 assignTorpedo
返回该值时,闭包就存在了。在闭包中,变量“i”的值已经是 4。
关于javascript - 来自 CoderSchool 的 JavaScript 中的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579045/
我在 CodeSchool 上做了一些研究。在观看教程时,我对一个示例感到困惑。他们在视频中试图解释的是,在循环中创建的闭包要到最后一刻才会绑定(bind)。此代码的目的是在数组中对其进行名称检查,并
我是一名优秀的程序员,十分优秀!