javasript宿主環境有事件循環,異步任務會被加入到任務隊列,任務隊列分爲兩種,宏任務(macroTask)和微任務(microTask)。java
宏任務隊列會有多個,微任務隊列只有一個。ajax
每次事件循環,先執行微任務隊列,執行完後,會選擇一個宏任務隊列執行,而後再次執行微任務隊列,完成後再挑一個宏任務隊列執行..promise
總之,就是 microTask queue -> macroTask queue -> microTask queue -> macroTask queue ....異步
結果是,微任務會先於宏任務執行。spa
Microtasks:
process.nextTick
promise
Object.observe
MutationObserver
Macrotasks:
setTimeout
setInterval
setImmediate
script(全局任務)
I/O(例如ajax)
UI渲染
優先級:process.nextTick > promise , setImmediate > setTimeoutcode
速記:微任務,全部p開頭的和觀察的;宏任務,全部set開頭的,以及大塊操做,例如script標籤,IO,UI渲染server