event-loop 事件循环
javascript是单线程的,其通过使用异步而不阻塞主进程执行。
浏览器环境下,会维护一个任务队列,当异步任务到达的时候加入队列,等待事件循环到合适的时机执行。
任务队列分为两种任务:
- Task(macroTask) 宏任务: setTimeout, setInterval, UI rendering 等
- microTask 微任务: Promise, MutationObserver等
事件循环会按照如下步骤进行:
- event-loop start
- microTasks 队列开始清空(执行)
- 检查 Tasks 是否清空,有则跳到 4,无则跳到 6
- 从 Tasks 队列抽取一个任务,执行
- 检查 microTasks 是否清空,若有则跳到 2,无则跳到 3
- 结束 event-loop
microTasks 队列在一次事件循环里面不止检查一次
node环境的event-loop跟浏览器中的不同。
参考 :(1)理解event loop(浏览器环境与nodejs环境) (2)JavaScript 运行机制详解:再谈Event Loop