📌 예시의 코드를 실행할 때, 콘솔에 출력될 값과 그 이유를 설명해 주세요.
// 1번
let num = 1;
// 2번
setTimeout(() => {
num = 2;
}, 0);
// 3번
num = 3;
// 4번
console.log(num);
- 1번 코드에 의해 num에 1이 할당된다.
setTimeout()
은 Web API
가 처리하도록 실행 흐름을 넘긴다.
- setTimeout(callback, 0)이 실행되면 callback함수를
callback queue
로 넘긴다.
- 3번 코드에 의해 num에 3이 할당된다.
- 4번 코드에 의해 현재 num에 할당된 3이 출력된다.
- 이후
call stack
이 비어있으면, Event Loop
가 그것을 확인하고 callback queue
에 저장해둔 callback함수를 실행시켜 num에 2가 할당된다.
call stack
에는 작성한 코드의 역순으로 호출한 함수가 저장된다.
- 처음 call stack에 가장 먼저
console.log(num)
이 들어가기 때문에 console.log()가 실행되어야 call stack이 비게 되는 것이다.