gpt4 book ai didi

javascript - for 循环中 setTimeout 函数的返回值

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

大家好,当我执行这段代码时,我的控制台日志中出现了 40,有人可以解释一下原因吗

for (var i = 0; i < 10; i++) {
setTimeout(function () {
console.log(i);
}, 300000)
};

最佳答案

您在控制台上得到的是 setTimeout() 返回的 id。如果您再次运行该代码,您可能会得到不同的值。我们无法预测这个 id,它是随机的。

如果要使用 setTimeout() 打印 0-9 的值,则需要注意范围。

使用bind():

console.log('before loop');
for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(this.i);
}.bind({
i: i
}), 1000)
}
console.log('after loop');

使用闭包:

console.log('before loop');
for (var i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() {
console.log(i); //<-- parameter i
}, 1000);
})(i); //<-- i from loop scope
}
console.log('after loop');

按超时时间递增的顺序打印。

console.log('before loop');
for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(this.i);
}.bind({
i: i
}), 100 * i); //<-- note `* i`
}
console.log('after loop');

关于javascript - for 循环中 setTimeout 函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913653/

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