웹 기술 기초
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가 마지막이 됩니다.