Web技術基礎
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');在瀏覽器中執行上方的JavaScript時,主控台顯示文字的順序,下列何者正確?
- AA → B → C → D
- BA → D → B → C
- CA → D → C → B
查看答案與解析
正確答案:C. A → D → C → B
網頁的JavaScript在單一主執行緒上執行,在目前執行中的程式碼結束前,其他處理不會插入。首先同步的程式碼全部執行,顯示A與D。傳給Promise之then的處理作為微任務,會在目前的程式碼結束後立即執行,因此接著顯示C。即使setTimeout指定0 ms,該處理也會作為任務排入佇列,由事件迴圈在處理完微任務之後才取出,因此B最後顯示。
- A. 傳給setTimeout或then的處理不會當場執行,而是在同步的程式碼結束後才執行。
- B. Promise的處理(微任務)比setTimeout的處理(任務)先執行。
- C. 正確。依序為同步程式碼的A與D、微任務的C、任務的B。