javascript - 来自 CoderSchool 的 JavaScript 中的闭包

标签 javascript for-loop

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

相关文章:

javascript - 谷歌脚本超时

javascript - 我如何使用事件目标属性访问 <li> 元素中的特定值?

python - python中神秘的for循环

javascript - 减少 Javascript 函数长度

javascript - Jquery animate() 一次然后停止

javascript - 如何减慢这个 for 循环并每 400 毫秒设置一次状态?

java - 无法一次将多个图像移动到另一个文件夹

javascript - 当出现警告框时,如何在 10 秒后刷新?

javascript - Twitter Bootstrap 警报(通知)动态更改文本

javascript - Javascript 有没有办法确定错误是 SQLError?