1
3
5
2
4
JavaScript 身為腳本語言在瀏覽器中的運行機制可以分為兩種任務三個步驟執行。 同步任務永遠優先於非同步任務執行。
- CallStack (執行任務 以 Chrome 瀏覽器為例,是由V8引擎執行 )
- Web API(事件監聽)
- Callback Queue ( 觸發的事件排隊等待在 CallStack 執行)
- Event Loop (串聯 Call Stack 與 Callback Queue,將非同步任務轉換為同步任務的關鍵元素)
若 Call Stack 執行完成所有任務,則從 Callback Queue 裡面提取非同步任務執行。
- 在
Call Stack
執行console.log(1)
- 將
setTimeout(() => {console.log(2)}, 0)
從Call Stack
移動到Web API
等待事件觸發 - 在
Call Stack
執行console.log(3)
。setTimeout
事件在Web API
被觸發,將任務console.log(2)
移動到Callback Queue
等待執行。 - 將
setTimeout(() => {console.log(4)}, 0)
從Call Stack
移動到Web API
等待事件觸發 - 在
Call Stack
執行console.log(5)
,setTimeout
事件在Web API
被觸發,將任務console.log(4)
移動到Callback Queue
等待執行。 Event Loop
將console.log(2)
從Callback Queue
移動到Call Stack
執行。Event Loop
將console.log(4)
從Callback Queue
移動到Call Stack
執行。