Web技術基礎

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');

在瀏覽器中執行上方的JavaScript時,主控台顯示文字的順序,下列何者正確?

  1. AA → B → C → D
  2. BA → D → B → C
  3. 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。
練習這個領域 前往領域頁面

Web技術基礎的其他題目

  1. 依瀏覽器的同源政策,被視為與 https://www.example.com/app/index.html 同源的URL為下列何者?
  2. https://app.example.com 網頁的JavaScript,要使用fetch對 https://api.example.net/orders 送出附有Content-Type: application/json本文的POST請求。此時跨來源資源共用(CORS)的行為,下列何者正確?
  3. 關於Service Worker的說明,下列何者正確?
  4. 在也支援智慧型手機的響應式設計網頁中,於<head>寫入 <meta name="viewport" content="width=device-width, initial-scale=1"> 的主要目的為下列何者?
  5. 在內容因使用者而異的「我的頁面」回應中,加上Cache-Control: private, max-age=60。這項設定的效果,下列何者正確?