2018-07-06 ( 循环中加定时器 i的问题)

ifor(var i = 0;i < 2;i++){

  setTimeout(function (){

       alert(i)

},0)

}

输出 两次 2 。

因为 javascript 是 单线程 执行的,也就是无法同时执行多段代码,当某一段代码正在执行的时候,所有后续的任务都必须等待,形成一个队形,一旦当前任务执行完毕,再从队列中,取出下一个任务,这也常被成为“阻塞式执行”。

如果代码中,设定了一个 setTimeout ,那么浏览器,便会在合适时间,将代码插入任务队列,如果这个时间设为 0 ,就代表 立即插入队列,但不是立即执行,仍然,要等待前面代码执行完毕。而在 我们这个 demo 里 for 循环 就是 所谓的 前面的代码,定时器 执行的 时机,只能在 for 循环结束,所以此时的 i 已经为 2 了 。

javascript 是 单个 执行的, 也就是 无法同时 执行 多 { 段 } 代码,当 某 一 段 代码 正在 执行的时候,所有,后续的任务都必须等待,形成一个队列,一旦当前任务执行完毕,再从队列中 取出下一个任务。

这就是 “阻塞式执行”。

如果代码中,设定了 一个 setTimeout ,那么浏览器便会在合适的时间,将代码插入任务队列,如果,这个时间设为 0 , 就代表 立即插入队列,但不是立即执行,仍然,要等待前面代码执行完毕。

而我们这个 demo 里 for 循环,就是所谓的前面的代码,定时器执行的时机,只能在 for 循环结束,所以此时的 i 已经为 2 了 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容