gpt4 book ai didi

javascript - setTimeout 在控制台上的随机行为。如何按顺序获取计数以及此行为的原因?

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

for (var i = 0; i < 5; i++) {
function timer(j) {
setTimeout(function() {
alert(j);
}, 1000);
}
timer(i);
};

此代码生成随机计数结果。为什么会出现这种行为,我该怎么做才能获得正确的排序计数。

最佳答案

当脚本运行时,for 循环正在运行,您同时初始化了 5 个 setTimeout,每个都在 1000 毫秒后超时。因为它们都设置为同时运行,而且由于 setTimeout 甚至不是毫秒级精确度,超时顺序将无法预测。另一个潜在的混杂因素是 alert blocks

正如下面的评论所示,setTimeout可能 恰好按照它们设置的顺序运行,但不能保证 - 行为可能因浏览器而异。因此,如果您想确保它们按照设置的顺序运行,请为每次迭代添加几毫秒:

for (var i = 0; i < 5; i++) {
function timer(j) {
setTimeout(function() {
console.log(j);
}, 1000 + (j * 12));
}
timer(i);
}

警报版本:

for (var i = 0; i < 5; i++) {
function timer(j) {
setTimeout(function() {
alert(j);
}, 1000 + (j * 12));
}
timer(i);
}

关于javascript - setTimeout 在控制台上的随机行为。如何按顺序获取计数以及此行为的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51018481/

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