EventLoop

参考:

  1. https://segmentfault.com/a/1190000016278115

1 宏任务队列

一些异步任务的回调会依次进入这个队列。

这些异步任务包括:

  • setTimeout
  • setInterval
  • setImmediate (Node独有)
  • requestAnimationFrame (浏览器独有)
  • I/O
  • UI rendering (浏览器独有)

2 微任务队列

另一些异步任务的回调会进入微任务队列。

这些异步任务包括:

  • process.nextTick (Node独有)
  • Promise
  • Object.observe
  • MutationObserver

3 执行流程

  1. 执行全局Script同步代码
  2. 依次从微任务队列取出队首的任务,放入调用栈执行,直到执行完队列里【所有的】微任务
  3. 如果在执行microtask的过程中,又产生了microtask,那么会加入到队列的末尾,也会在这个周期被调用执行
  4. 从宏任务队列取出队首的任务,放入调用栈执行
  5. 宏队列中只取出【一个】任务执行,执行完这一个之后就去执行微任务
  6. 重复2-5这四步
    PS:在执行完所有的microtask之后,下一个macrotask之前,紧跟着执行UI render
posted @ 2022-04-06 20:11  bcj7wi3kd5h1wd6  阅读(18)  评论(0编辑  收藏  举报