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は1本のメインスレッドで動き、いま実行しているコードが終わるまで、ほかの処理は割り込みません。まず同期的なコードがすべて実行されて、A と D が表示されます。Promise の then に渡した処理はマイクロタスクとして、いまのコードが終わった直後に実行されるので、次に C が表示されます。setTimeout に0 msを指定しても、その処理はタスクとして順番待ちの列に入り、イベントループがマイクロタスクを片付けた後に取り出すので、B は最後になります。
- A. setTimeout や then に渡した処理は、その場では実行されず、同期的なコードが終わった後に実行されます。
- B. Promise の処理(マイクロタスク)は、setTimeout の処理(タスク)より先に実行されます。
- C. 正しい。同期的なコードの A と D、マイクロタスクの C、タスクの B の順です。