gpt4 book ai didi

javascript - 来自 CoderSchool 的 JavaScript 中的闭包

转载 作者:行者123 更新时间:2023-11-30 17:13:17 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com