JS事件循环的理解

  1. js引擎运行的环境就是宿主环境,通常就是Web浏览器、node
  2. js引擎提供一种机制来处理分块执行的代码,这种机制就是事件循环:

事件循环伪代码:

var eventLoop = []; // eventLoop 作为队列的数据,存储待执行的事件
var event; // 当前要处理的事件
while(true){
  // 一次tick
if(eventLoop.length > 0){
    event = eventLoop.shift()
    try{
        // 执行当前事件
        event()
    } catch (err){
        // 错误上报
        reportError(err)
    }
  }
}

  1. setTimeout()为什么不精准?
    因为setTimeout并没有把你的回调函数挂在事件循环中。作为一个定时器,当设定时间到达后,环境才把你的回调函数放入事件循环中。这时候你的事件队列可能很长了,所以这个回调执行的时间完全依赖事件队列的状态决定。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容