繁体   English   中英

javascript中setTimeout函数执行的困惑

[英]Confusion in the execution of setTimeout function in javascript

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

在上面提到的代码中,我们以 1 秒的时间段得到 0,1,2,3,4 作为输出。 由于我们给出的时间间隔为 i*1000,那么为什么时间间隔没有增加。 我的意思是当 i 值为 3 或 4 时,循环内部的时间间隔为 3 秒或 4 秒。 它应该继续增加,因为它取决于 i。 我对事件循环和回调队列有一些小想法。 但我无法在这里联系起来。 请解释。

代码工作正常。 这就是你的代码所做的。 它说该函数应该在1*1000 2*1000毫秒内调用,然后是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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM