javascript中setTimeout函数的执行混乱
javascript中setTimeout函数的执行混乱,javascript,Javascript,for(设i=0;i
for(设i=0;i<5;i++){
setTimeout(函数(){
控制台日志(i);
},i*1000);
}
代码工作正常。这就是你的代码所做的。它说函数应该在1*1000
mlliseconds内调用,然后在2*1000
毫秒内调用,然后在3*1000
毫秒内调用,依此类推
因此,当1秒过去后,将首次调用该函数。2秒后,将再次调用该函数。3秒后,将第三次调用该函数。等等
这就是为什么当程序运行时,您会发现函数以1秒的间隔被调用。代码工作正常。这就是你的代码所做的。它说函数应该在
1*1000
mlliseconds内调用,然后在2*1000
毫秒内调用,然后在3*1000
毫秒内调用,依此类推
因此,当1秒过去后,将首次调用该函数。2秒后,将再次调用该函数。3秒后,将第三次调用该函数。等等
因此,当程序运行时,您会发现函数在1秒的时间间隔内被调用。代码运行正常,javascript运行异步。这意味着
setTimeout()
不要阻塞代码。它只是执行setTimeout并继续循环。该代码与此处的代码几乎相同:
<script>
setTimeout(function(){
console.log(0 + " seconds");
}, 0 * 1000)
setTimeout(function(){
console.log(1 + " seconds");
},1 * 1000)
setTimeout(function(){
console.log(2 + " seconds");
},2 * 1000)
setTimeout(function(){
console.log(3 + " seconds");
},3 * 1000)
setTimeout(function(){
console.log(4 + " seconds");
},4 * 1000)
</script>
setTimeout(函数(){
控制台日志(0+“秒”);
}, 0 * 1000)
setTimeout(函数(){
控制台日志(1+“秒”);
},1 * 1000)
setTimeout(函数(){
控制台日志(2+“秒”);
},2 * 1000)
setTimeout(函数(){
控制台日志(3+“秒”);
},3 * 1000)
setTimeout(函数(){
控制台日志(4+“秒”);
},4 * 1000)
代码运行良好,javascript异步运行。这意味着setTimeout()
不要阻塞代码。它只是执行setTimeout并继续循环。该代码与此处的代码几乎相同:
<script>
setTimeout(function(){
console.log(0 + " seconds");
}, 0 * 1000)
setTimeout(function(){
console.log(1 + " seconds");
},1 * 1000)
setTimeout(function(){
console.log(2 + " seconds");
},2 * 1000)
setTimeout(function(){
console.log(3 + " seconds");
},3 * 1000)
setTimeout(function(){
console.log(4 + " seconds");
},4 * 1000)
</script>
setTimeout(函数(){
控制台日志(0+“秒”);
}, 0 * 1000)
setTimeout(函数(){
控制台日志(1+“秒”);
},1 * 1000)
setTimeout(函数(){
控制台日志(2+“秒”);
},2 * 1000)
setTimeout(函数(){
控制台日志(3+“秒”);
},3 * 1000)
setTimeout(函数(){
控制台日志(4+“秒”);
},4 * 1000)
它正在增加。该代码导致从代码运行开始,在1000、2000、3000和4000毫秒内调用4个函数。函数调用之间的相对持续时间始终为~1000 mssetTimeout()
不会停止循环的执行。它正在增加。该代码导致从代码运行开始,在1000、2000、3000和4000毫秒内调用4个函数。函数调用之间的相对持续时间总是~1000 mssetTimeout()
不会停止循环的执行。“javascript异步运行”似乎太模糊了。JavaScript非常同步,但存在一个事件循环,一些操作会向该循环添加新任务<代码>设置超时就是其中之一。“javascript异步运行”似乎太模糊了。JavaScript非常同步,但存在一个事件循环,一些操作会向该循环添加新任务<代码>设置超时就是其中之一。