關於非同步回呼
在章節的最前面有提到 JavaScript 會同步執行程式碼,而非同步指的就是在同一個時間不只執行一段程式碼
在瀏覽器中,JavaScript 並非唯一執行的引擎,還包括渲染引擎 (Rendering Engine) 和 HTTP Request ,彼此是非同步執行,不會因為一個卡住而使其他引擎停止運作,其中只有 JavaScript 使用同步執行
JavaScript 的非同步其實是瀏覽器將事件放到事件佇列 (Event Queue) 中,原本的程式碼仍然一行行執行,當每個執行堆執行完清空後,才會繼續執行下一個事件,並創造其執行環境
一段程式碼如下,首先執行一段 3 秒的 callback function,並宣告一個點擊事件,最後印出完成,如果在 3 秒內點擊會依照下方順序印出,原因是非同步只存在於 JavaScript 引擎外,所以非同步只是將事件加入 Event Queue,等到執行環境清空後才會依序執行 Event Queue 中的事件
1 | // long runuing function |