宏任务:

  • setTimeout
  • setInterval
  • setImmediate
  • requestAnimationFrame
  • I/O
  • UI rendering

微任务:

  • process.nextTick
  • Promises
  • queueMicrotask
  • MutationObserver

事件循环算法(尽管与 规范 相比仍然是简化过的):

  1. 宏任务 队列中出队并执行最早的任务。
  2. 执行所有 微任务
    • 当微任务队列非空时:
    • 出队并执行最早的微任务。
  3. 如果有变更,则将变更渲染出来。
  4. 如果宏任务队列为空,则休眠直到出现宏任务。
  5. 转到步骤 1。

宏任务和微任务