事件循環是一種在 JavaScript 中的機制,允許運行時處理非同步操作。它確保 JavaScript 在單執行緒環境中保持響應性且無阻塞,通過管理多個任務的執行。
單執行緒執行: JavaScript 是 單執行緒
,這意味著它一次只能執行一個任務。這由 呼叫堆疊
管理,函數以 同步
的方式執行(也就是一個接著一個)。
呼叫堆疊: JavaScript 中的主要線程,用於執行同步代碼。它跟踪當前正在執行的函數。
把呼叫堆疊想像成一疊盤子。
每當呼叫一個函數,
一個新的盤子(函數)就會被添加到堆疊上。
當一個函數完成時,
它的盤子(函數)會從堆疊上移除。
網頁 API: 對於像 setTimeout
、HTTP 請求
、fetch
和 DOM 事件
這樣的非同步操作,JavaScript 使用瀏覽器提供的網頁 API。這些操作是在呼叫堆疊之外處理的。
回呼佇列: 當一個非同步操作完成時,回呼函數會被添加到回呼佇列。這個佇列會等待直到呼叫堆疊清空,然後將回呼函數推送到呼叫堆疊中執行。
事件循環: 事件循環不斷檢查呼叫堆疊和回呼佇列。如果呼叫堆疊是空的,它將第一個函數從回呼佇列移到呼叫堆疊中進行執行。
微任務佇列: 對於 Promise 和變異觀察者,JavaScript 維護一個名為微任務佇列的獨立佇列。微任務的優先級高於回呼佇列的任務。事件循環首先檢查微任務佇列,然後是回呼佇列。
這就是事件循環的簡要介紹!它是 JavaScript 運行時環境的一個關鍵部分,確保非同步操作被有效處理,並使應用程序保持響應。