此代码等待一秒钟并立即执行所有迭代:
for(let i=0;i<4;i++){
setTimeout(function(){console.log("Hello")},1000)
}
此代码按预期正确执行:
var i = 0;
function loop(){
setTimeout(function(){
console.log("Hello" + " " + Number(i+1))
i++
if(i<3){
loop()
}
},1000)
loop()
我的问题是为什么?这与 JavaScript 的同步单线程特性有关吗?为何如此?我的问题是解释为什么会发生这种情况。
最佳答案
您的第一个代码执行此操作:
“设置四个超时,从现在起一秒后结束”
您的第二个代码是:
“设置超时并提醒 i
的值,增加 i
,如果循环未结束,则设置新的超时”
差别很大!关键是,设置多个超时并不像队列,它们都会从您调用它们时开始。
关于javascript - 为什么 setTimeout 在循环内与递归函数内无法正确执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538017/