1. 程式人生 > 其它 >JS事件執行機制

JS事件執行機制

javascript是一門單執行緒語言,js任務是一個一個順序執行,分為同步任務和非同步任務,同步任務會進入主執行緒,非同步任務會進入Event Table(事件表),當時間表中的非同步任務完成後就會在Event Queue(事件佇列)中註冊回撥函式,主執行緒任務全部完成後,才會執行Event Queue中的回撥,js解析器會不斷重複檢查主執行緒執行棧是否為空,然後重複第3步,這就是Event Loop(事件迴圈)

任務又可以進一步分為巨集任務和微任務

巨集任務:setTimeout setInterval

微任務:promise process.nextTick

 

 

 

 

在事件迴圈(主執行緒——>事件佇列)中的操作流程,即(微任務——>巨集任務)

 

 

 

通常情況下,頁面中js執行順序:

第一輪事件迴圈:

主執行緒執行js整段程式碼,將ajax,setTimeout等回撥函式註冊到事件佇列,並區分巨集任務和微任務
主執行緒提取並執行事件佇列中的所有微任務,並註冊微任務中的非同步任務到事件佇列中
第二輪事件輪詢:

主執行緒提取事件佇列中的第一個巨集任務
主執行緒執行第一個巨集任務,並註冊這個巨集任務中的非同步任務到事件佇列
執行事件佇列中的所有微任務,並將微任務中的非同步任務到事件佇列中

巨集任務每執行完一個,就清空一次事件佇列中的微任務

事件佇列中分‘巨集任務佇列’和‘微任務佇列’,每執行一次任務都可能註冊新的巨集任務或微任務到響應的任務佇列中