此代码等待一秒钟并立即执行所有迭代:
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的同步单线程特性有关?怎么会这样?关于为什么会发生这种情况的解释是我的问题。
答案 0 :(得分:4)
您的第一个代码执行此操作:
“设置四个超时时间从现在开始一秒钟”
你的第二个代码是:
“设置超时并提醒i
的值,增加i
,如果循环未结束,则设置新超时”
相当不同!关键是,设置多个超时不像一个队列,它们都将从你打电话时开始。
答案 1 :(得分:0)
您可能希望将延迟乘以i
var f = function(){console.log("Hello")};
for (let i=0; i<4; ++i) setTimeout(f, i * 1000);
&#13;