宏任務和微任務

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

相關文章
相關標籤/搜索