14.2.2 스코프와 비동기적 실행

  • 비동기적 실행에서 혼란스럽고 에러가 자주 일어날 수 있는 부분 => 스코프와 클로저가 비동기적 실행에 영향을 미치는 부분

  • 콜백은 자신이 선언한 스코프(클로저)에 있는 것에 접근할 수 있음

잘못된 예제

  function countdown() {
    let i;
    console.log("Countdown: ");

    for (i=5; i>=0; i--) {
      setTimeout(function() {
        console.log(i === 0 ? "GO!" : i);
      }, (5-i) * 1000)
    }
  }

  countdown();
  • 위의 코드를 실행하면 -1 이 여섯 번 반복됨

  • Why? 변수를 for 루프 밖에 선언했으므로

해결방법

  function countdown() {
    console.log("Countdown: ");

    for (let i=5; i>=0; i--) { // i를 블록 스코프 변수로 변경
      setTimeout(function() {
        console.log(i === 0 ? "GO!" : i);
      }, (5-i) * 1000)
    }
  }

  countdown();

Last updated