微任务&宏任务

引用自:https://zh.javascript.info/event-loop

总结

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

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

安排(schedule)一个新的 宏任务

  • 使用零延迟的 setTimeout(f)

它可被用于将繁重的计算任务拆分成多个部分,以使浏览器能够对用户事件作出反应,并在任务的各部分之间显示任务进度。

此外,也被用于在事件处理程序中,将一个行为(action)安排(schedule)在事件被完全处理(冒泡完成)后。

安排一个新的 微任务

  • 使用 queueMicrotask(f)
  • promise 处理程序也会通过微任务队列。

在微任务之间没有 UI 或网络事件的处理:它们一个立即接一个地执行

所以,我们可以使用 queueMicrotask 来在保持环境状态一致的情况下,异步地执行一个函数。

你可能感兴趣的:(微任务&宏任务)