gpt4 book ai didi

javascript - 对函数闭包感到困惑

转载 作者:行者123 更新时间:2023-11-30 14:54:48 25 4
gpt4 key购买 nike

有人可以解释一下为什么控制台注销 10、10、10 而不是 9、9、9 吗?当它通过 for 循环时,它不应该在 9 处停止吗?

var foo = [];
for (var i = 0; i < 10; i++) {
foo[i] = function() {
return i;
};
};

console.log(foo[0]());
console.log(foo[1]());
console.log(foo[2]());

最佳答案

每当使用父作用域中的任何变量的任何函数被执行时,它都会获得在函数执行时它所持有的变量的值。在您的情况下,由于 i++i 在执行时已经达到 10

为了获得预期的结果,您可以向其中添加 IIFE,它将在其范围内保存 i 的值。

var foo = [];
for (var i = 0; i < 10; i++) {
foo[i] = (function(i) {
return function() {
return i;
};
})(i);
};

console.log(foo[0]());
console.log(foo[1]());
console.log(foo[2]());

关于javascript - 对函数闭包感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47473491/

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