事件循環(Event Loop)

event loop它的執行順序:

  1. 一開始整個腳本作爲一個宏任務執行
    執行過程中同步代碼直接執行,宏任務進入宏任務隊列,微任務進入微任務隊列
    當前宏任務(同步代碼)執行完出隊,檢查微任務列表,有則依次執行,直到全部執行完
    執行瀏覽器UI線程的渲染工作
    檢查是否有Web Worker任務,有則執行
    執行完本輪的宏任務,回到2,依此循環,直到宏任務和微任務隊列都爲空

  2. 微任務包括:MutationObserver、Promise.then()或catch()、Promise爲基礎開發的其它技術,比如fetch API、V8的垃圾回收過程、Node獨有的process.nextTick。
    宏任務包括:script 、setTimeout、setInterval 、setImmediate 、I/O 、UI rendering。

  3. 注意⚠️:在所有任務開始的時候,由於宏任務中包括了script,所以瀏覽器會先執行一個宏任務,在這個過程中你看到的延遲任務(例如setTimeout)將被放到下一輪宏任務中來執行。

補充

第一個宏任務(同步)執行完畢,會執行微任務。微任務執行完畢,會執行第二個以至於後面的宏任務

微任務隊列只有一個
宏任務隊列有多個

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章