1.機制如下:


注意一點:
宏任務需要多次事件循環才能執行完,微任務是一次性執行完的;
2.宏任務macrotask:
(事件隊列中的每一個事件都是一個macrotask)
優先級:主代碼塊 > setImmediate > MessageChannel > setTimeout / setInterval
比如:setImmediate指定的回調函數,總是排在setTimeout前面
3.微任務包括:
優先級:process.nextTick > Promise > MutationObserver
4.舉個栗子:
(1)下面這個代碼輸出結果是什么?(先不要看下面的答案,自己想一想)

(2)揭曉答案:
主程序和和settimeout都是宏任務,兩個promise是微任務
第一個宏任務(主程序)執行完,執行全部的微任務(兩個promise),再執行下一個宏任務(settimeout),所以結果為:
