Skip to content

事件循环

运行流程

  • 执行同步代码: js从调用栈顶部开始执行,知道栈为空
  • 清空微任务(Mircotasks):只要栈空了,事件循环会立即检查微任务队列。它会一口气执行完所有的微任务,直到该队列清空
  • 渲染(Rendering):如果浏览器认为有必要(比如屏幕刷新率到了),会进行UI渲染
  • 执行宏任务(Maccotasks):从任务队列中取出一个(且仅一个)任务放入调用栈执行
  • 循环:回到步骤2,循环往复
类型内容优先级
微任务Promise.then/catch/finally,process.nextTick高(在当前轮次清空)
宏任务setTimeoutsetInerval,I/O,UI渲染低(每轮循环只取一个)