js事件回圈
1、js主執行緒事件處理腳本
當js執行一個腳本時,會先從上到下決議腳本內的代碼,如果這個任務是一個同步任務,js引擎會將任務放入執行堆疊中就地執行,如果這個任務是一個異步任務,js引擎會將這個任務掛起并放入js運行環境去執行,繼續向下尋找同步任務,
2、js運行環境處理異步任務
js運行環境會接收腳本傳輸過來的異步任務并執行,執行完畢后會將事件回傳的結果分為兩種放入任務佇列中,這兩種任務就是宏任務與微任務,js運行環境會將它們分別放入宏任務佇列與微任務佇列中等待js主執行緒執行,
3、js主執行緒決議任務佇列
當所有同步任務執行完畢后,js將在任務佇列中的代碼放入執行堆疊執行,js會優先讀取微任務佇列中的任務,當微任務佇列執行完畢后,js才會讀取宏任務佇列中的任務,如果在這個宏任務中還有微任務,主執行緒會將這個任務放入微任務佇列中等待執行,當宏任務執行完畢后,主執行緒會先查詢微任務佇列中是否還有微任務需要執行,如果有就先執行微任務,開始回圈,
小結:如果宏任務佇列與微任務佇列同時存在任務將會優先執行微任務

同步任務:
- console.log('')
-
new Promise
異步任務:
- setTimeout、setInterval 定時器
- XMLHttpRequest
- async function
微任務:
- process.nextTick
- Promise.then catch finally
- new Promise
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/337717.html
標籤:其他
