본문 바로가기

JavaScript

JavaScript - 비동기실행 순서 예제

// 1번
let num = 1;

// 2번
setTimeout(() => {
  num = 2;
}, 0);

// 3번
num = 3;

// 4번
console.log(num);

위 코드 실행시 콘솔에 출력될 값과 그 이유는?

출력될 값

 3

 

이유

실행 순서는 다음과 같다.

  1. 처음 num변수에 1이 담김.
  2. setTimeout함수가 0초이지만, 일단 순서를 뒤로 미루고 함수밖의 로직을 먼저 처리한다.
  3. (콜스택에 setTimeout 바깥 로직이 먼저 들어가서, 0초후 실행되었어야하는 콜백함수의 순서가 뒤로 밀린다.)
  4. 이후 num에 3이 담김.
  5. console에 3이 찍힘.
  6. num이 2로 바뀜.