event-loop 事件循环

javascript是单线程的,其通过使用异步而不阻塞主进程执行。

浏览器环境下,会维护一个任务队列,当异步任务到达的时候加入队列,等待事件循环到合适的时机执行。


任务队列分为两种任务:

  • Task(macroTask) 宏任务: setTimeout, setInterval, UI rendering 等
  • microTask 微任务: Promise, MutationObserver等


事件循环会按照如下步骤进行:

  1. event-loop start
  2. microTasks 队列开始清空(执行)
  3. 检查 Tasks 是否清空,有则跳到 4,无则跳到 6
  4. 从 Tasks 队列抽取一个任务,执行
  5. 检查 microTasks 是否清空,若有则跳到 2,无则跳到 3
  6. 结束 event-loop


microTasks 队列在一次事件循环里面不止检查一次


node环境的event-loop跟浏览器中的不同。


参考 :(1)理解event loop(浏览器环境与nodejs环境) (2)JavaScript 运行机制详解:再谈Event Loop


确认 取消