JavaScript 事件循環機制是 JavaScript 運行時的核心,它決定了 JavaScript 如何處理異步操作和事件。JavaScript 是單線程的,這意味著它一次只能執行一個任務。為了實現非阻塞性操作,JavaScript 引入了事件循環機制。
事件循環機制包括以下幾個部分:
調用棧:當 JavaScript 代碼執行時,函數調用會形成一個調用棧。調用棧是一個執行上下文棧,用于存儲當前正在執行的函數。當一個函數執行完畢,它會從調用棧中彈出,繼續執行下一個函數。
事件隊列:JavaScript 代碼中的異步操作(如定時器、網絡請求等)會被放入事件隊列中等待執行。事件隊列是一個先進先出(FIFO)的數據結構,用于存儲待執行的異步操作。
微任務隊列:當調用棧中的代碼執行完畢,JavaScript 引擎會檢查微任務隊列中是否有任務需要執行。如果有,則會依次執行微任務隊列中的任務。
宏任務隊列:當微任務隊列中的任務執行完畢,JavaScript 引擎會從宏任務隊列中取出一個任務執行,執行完畢后再回到微任務隊列中執行微任務。
事件循環機制的執行流程如下:
需要注意的是,微任務和宏任務的執行順序是不同的。微任務的執行優先級高于宏任務,即微任務隊列中的任務會在宏任務隊列中的任務之前執行。這樣可以確保 JavaScript 能夠及時處理異步操作,避免阻塞。