Event loop笔记

165 阅读1分钟

执行栈

数据结构, js运行时会将运行函数入栈, 遵循先进后出的原则

浏览器中的事件循环

js运行时会在执行栈中放入函数, 如果碰到异步代码则会被挂起, 放入到task队列.

如果执行栈执行完了, 就会去队列中拿出需要要执行的代码放入执行栈.

不同的任务源会被分为宏任务或者微任务

  • 首先执行同步代码,这属于宏任务
  • 当执行完所有同步代码后,执行栈为空,查询是否有异步代码需要执行
  • 执行所有微任务
  • 当执行完所有微任务后,如有必要会渲染页面
  • 然后开始下一轮 Event Loop,执行宏任务中的异步代码,也就是 setTimeout 中的回调函数

微任务包括 process.nextTickpromiseMutationObserver,其中 process.nextTick 为 Node 独有。

宏任务包括 scriptsetTimeoutsetIntervalsetImmediateI/OUI rendering