Javascript JS破坏性作业-为什么它是这样工作的?

Javascript JS破坏性作业-为什么它是这样工作的?,javascript,variable-assignment,Javascript,Variable Assignment,for(变量i=1;i

for(变量i=1;i<5;i++){
控制台日志(i);
setTimeout(函数(){
控制台日志(i);
}, 3000)

};设置超时延迟函数调用,它不会使实际程序进入睡眠状态。这是一种异步方法,如果要暂停应用程序,请执行以下操作:

for(变量i=1;i<5;i++){
控制台日志(i);
睡眠(3000);
控制台日志(i);

};您可以使用索引控制设置超时的时间:

for(变量i=0;i<4;i++){
设置超时(功能(ii){
控制台日志(ii);
}.bind(0,i+1,i*1000)

};您在
i
上有一个闭包。延迟调用接受它的最后一个值。似乎setTimeout函数是。阻止,这样事件循环在完成之前不会继续。前1 2 3 4基于
for
循环内部的日志。其余四个5从循环中启动的
setTimeout
打印。“这不是一个明显的操作序列”,是的
setTimeout
不会阻塞,循环在第一个超时执行之前完成。此时变量值已增长到5。此外,所有超时都是在不到一毫秒的时间内按顺序在循环中设置的,因此它们将在几乎相同的时间触发,因为它们设置了相同的延迟。@Teemu,感谢您的仔细阅读和回答。是的,这是一个关键点,大多数浏览器都不支持睡眠。。。如果您不想使用polyfill,请查看本文