gpt4 book ai didi

javascript - 令人头疼的 JS 范围和关闭

转载 作者:行者123 更新时间:2023-11-28 15:51:41 24 4
gpt4 key购买 nike

看代码,解释了1000多字。我不明白,为什么所有 5 个创建的函数总是返回 5(最后一次迭代值)。我真的很感兴趣,有什么问题或者我错过了什么。我记得敢,Douglas Crockford 谈过这个东西,但我也没有找到那个资源。

function createFunctions(n) {
var arrayFunctions = [];

for (var i=0; i<n; i++) {
arrayFunctions.push(function() {
console.log(i);
});
}

return arrayFunctions;
}

var arrayFunctions = createFunctions(5);

arrayFunctions[2](); // returns 5 instead of 2
arrayFunctions[3](); // returns 5 instead of 3
arrayFunctions[4](); // returns 5 instead of 4

最佳答案

函数正在关闭变量,而不是变量的值。这意味着它们都引用循环中定义的 i 并在每次迭代时更新。当 createFunctions 返回时,循环已完成,i 处于其最终值 (5)。

function createFunctions(n) {
var arrayFunctions = [];

for (var i=0; i<n; i++) {
(function(j) {
arrayFunctions.push(function() {
console.log(j);
});
}(i));
}

return arrayFunctions;
}

关于javascript - 令人头疼的 JS 范围和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340217/

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