js中setTimeout()时间参数设置为0的探讨

JS的for循环包裹异步函数的问题

for (var i=0; i<5; i++)

 {  console.log(i)  }

结果:0,1,2,3,4

for (var i=0; i<5; i++)

 { 

    setTimeout( 

function(){

 console.log(i) 

},0 ) }

结果:5,5,5,5,5

虽然setTimeout函数在每次循环的开始就调用了,但是却被放到循环结束才执行,循环结束,此时i=5,接连打印了5次5。

这里涉及到javascript单线程执行的问题:javascript在浏览器中是单线程执行的,必须在完成当前任务后才执行队列中的下一个任务。

另外,对于javascript还维护着一个setTimeout队列,未执行的setTimeout任务就按出现的顺序放到setTimeout队列,等待普通的任务队列中的任务执行完才开始按顺序执行积累在setTimeout中的任务。

所以在这个问题里,将setTimeout任务放到setTimeout任务队列,等循环中的打印任务执行完了,才开始执行setTimeout队列中的函数,所以在最后会接着打印5次5。

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

相关阅读更多精彩内容

  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 10,842评论 0 7
  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 13,836评论 0 11
  • 之前在网上看了很多关于setTimeout的文章,但我感觉都只是点到为止,并没有较深入的去剖析,也可能是我脑袋瓜笨...
    Designleiou阅读 3,971评论 1 1
  • 周六在上班中! 一想到下周要回家的事,也是头疼! 不想面对世间的‘纷纷扰扰’,不想面对只会徒加烦恼的世俗,就是想无...
    兰花大海阅读 1,445评论 0 0
  • 1.创建一个动态web项目工程 需要添加xml 2.引入SpringMvc 需要的JAR包 忘记引一个jar包 然...
    尼尔君阅读 1,661评论 0 0

友情链接更多精彩内容