JS单线程引起的阻塞和解决办法
对于这段代码for(var i = 0; i < 3; i++){ setTimeout(function(){ console.log(i); }, 1000);}输出的结果是3 3 3;那么为什么是3 3 3,而不是0 1 2呢?原因是 js 是单线程,js引擎会维护一个执行栈(用来保存同步任务)和一个消息队列(用来保存异步任务),只有当执行栈为空时才会执行消息队列里的任务,for循环保存在执行栈里,setTimeout保存在消息队列里,在for的时候,js引擎在消息队列
原创
2020-07-14 22:43:17 ·
2547 阅读 ·
0 评论