gpt4 book ai didi

设置超时时的 JavaScript 闭环问题

转载 作者:行者123 更新时间:2023-11-30 08:00:21 25 4
gpt4 key购买 nike

我在教程中找到了一些示例(说这是规范示例)

        for (var i=1; i<=5 ; i++) {
setTimeout(function() {
console.log("i: " + i);
}, i*1000);
}

现在,我明白了,闭包将当前作用域传递给函数,我假设它应该输出 1,2,3,4,5。但相反,它打印了五次数字 6。
我在 chrome 调试器中运行它,首先它在执行 i 值的递增时通过循环而不进入函数,然后才进入内部函数并执行 5 次。
我不确定它为什么这样做,我知道,当前作用域是由于闭包而传递给函数的,但为什么它不在每次循环迭代时执行?

最佳答案

到超时运行时,for 循环已完成,i 为 6,这就是您获得所见输出的原因。您需要在循环中捕获 i:

for (var i=1; i<=5 ; i++) {
(function(innerI) {
setTimeout(function() {
console.log("i: " + innerI);
}, innerI*1000);
})(i);
}

这将创建一个带有自己参数 (innerI) 的内部函数,该函数会立即被调用并因此捕获 i 的值以在超时内使用。

关于设置超时时的 JavaScript 闭环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29795666/

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