더북(TheBook)

여기서 잠깐, 앞에서 작성한 반복문에서 letvar로 바꿔 봅시다.

for (var i = 0; i < winBalls.length; i++) {
    setTimeout(() => {
      drawBall(winBalls[i], $result);
    }, 1000 * (i + 1));
  }

그림 8-5 반복문에서 let을 var로 바꿨을 때

let 대신 var를 사용하면 당첨 숫자가 표시되지 않습니다. 3.2 스코프와 클로저에서 배운 것처럼 비동기 함수인 setTimeout()과 반복문, var가 만나 이런 문제가 발생합니다. var는 함수 스코프라서 winballs[i]i를 콘솔로 출력하면 모두 undefined, 6으로 나옵니다. 제대로 작동하게 하려면 원래대로 varlet으로 바꿉니다. 또는 i 값을 고정할 수 있는 함수를 추가하거나 forEach()를 사용해도 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.