// 1번
let num = 1;
// 2번
setTimeout(() => {
num = 2;
}, 0);
// 3번
num = 3;
// 4번
console.log(num);
이 코드를 실행하면 콘솔에는 '3'이 출력됩니다.
코드를 따라가 보자면,
변수 num이 1로 초기화됩니다.
setTimeout 함수가 호출되어 비동기적으로 콜백 함수가 실행됩니다. 이 콜백 함수에서 변수 num이 2로 변경됩니다. 그러나 이 콜백 함수는 현재 실행 스택이 비어있을 때 실행됩니다. 현재 코드 블록이 실행 중이므로, 이 콜백 함수는 현재 코드 블록이 완전히 실행된 이후에 실행됩니다.
변수 num이 3으로 변경됩니다.
console.log(num)이 실행되어 변수 num의 현재 값을 출력합니다. 현재 num의 값은 3이므로, 콘솔에는 3이 출력됩니다.