macrotask 和 microtask 表示異步任務的兩種分類。在掛起任務時,JS 引擎會將所有任務按照類別分到這兩個隊列中,首先在 macrotask 的隊列(這個隊列也被叫做 task queue)中取出第一個任務,執行完畢后取出 microtask 隊列中的所有任務順序執行;之后再取 macrotask 任務,周而復始,直至兩個隊列的任務都取完。
兩個類別的具體分類如下:
- macro-task: script(整體代碼),
setTimeout
,setInterval
,setImmediate
, I/O, UI rendering - micro-task:
process.nextTick
,Promises
(這里指瀏覽器實現的原生 Promise),Object.observe
,MutationObserver
詳見 stackoverflow 解答 或 這篇博客