Day06 JS 是同步還是非同步?
今天來看看JS,非同步背後的原理,在課程影片中提到:
JavaScript是一個單執行緒、同步的程式,它逐行執行程式碼,並不會非同步的執行程式。
等等,同步?
JS的特色之一不就是非同步嗎?
繼續看下去:
撇開node.js先不說,JS在瀏覽器執行時依賴引擎來驅動,而瀏覽器不是只有JavaScript引擎的存在,還有其他引擎在處理瀏覽器的其他狀態、程式。有可以呈現東西到瀏覽器畫面上的渲染引擎(Rendering Engine),也有其他專門處理http請求的東西存在。
JS引擎可以和瀏覽器的其他引擎、處理器互動,這個互動行為是非同步的,但JS引擎自己在運作JavaScript是同步的。如果有非同步的操作,那會發生什麼事呢?
JS引擎內的等待列稱為事件佇列Event Queue,如果有事件發生,如滑鼠點擊事件,JS引擎會先將事件放在事件佇列Event Queue,當執行環境的程式都執行完成後,JS才會開始注意事件佇列,此時檢查是否有函式被事件觸發,當有事件發生如點擊事件,它會創造執行環境給這個對應的函式執行。
JS在瀏覽器的非同步行為,其實是指