面試官:你有2分鐘的時間。向我解釋一下 JavaScript 事件循環。
我的回答是:接受挑戰,走吧! ?
? 單線程執行:
JavaScript 在單線程模型上運行,這意味著它一次只能處理一項任務。任務使用調用堆棧進行管理,調用堆棧逐一執行函數。
? 調用堆棧:
將調用堆棧想象為一堆板。每次調用函數時,都會將一個盤子添加到堆棧中。一旦功能完成,盤子就會被移除。
? Web API:
對于 setTimeout、DOM 事件或 HTTP 請求等任務,JavaScript 使用瀏覽器提供的 Web API。這些任務是在調用堆棧之外處理的。
? 回調隊列:
一旦異步任務完成,其回調就會移至回調隊列。事件循環僅在堆棧為空時將回調推送到堆棧。
? 事件循環:
事件循環充當看門人,檢查調用堆棧是否為空。當它是時,它從回調隊列中取出第一個任務并將其推入堆棧。
? 微任務隊列:
除了回調隊列之外,還有一個微任務隊列,用于處理 Promise 等任務。微任務在任何其他回調之前進行處理,從而賦予它們更高的優先級。
? 優先處理:
總而言之,事件循環首先檢查微任務隊列,然后繼續檢查回調隊列。這確保了關鍵任務(例如,promise)在其他回調之前執行。
這就是 JavaScript 事件循環! ?
?保持好奇心,不斷學習,不斷分享! ??