클로저 문제

fun a 스코프는 1개이고, for문의 스코프는 5개
a 스코프에서 i는 0 -> 5 가 되는거고, for 문의 스코프에서 i 는 0,1,2,3,4 가 되는것

function a() {
  for (var i = 0; i < 5; i++) {
    setTimeout(() => {
      console.log(i);
    }, i * 1000);
  }
}
a();
//5
//5
//5
//5
//5

var 은 함수단위스코프를 가지기 때문에 i값은 for에서 찾지않고 그상위인 a 함수에서 찾는다.
그경우 a 함수에서 i는 이미 루프가 끝난 5 인 상태이기 때문에 5가 출력된다.

function a() {
 for (let i = 0; i < 5; i++) {
   setTimeout(() => {
     console.log(i);
   }, i * 1000);
 }
}
a();
//0
//1
//2
//3
//4

var 을 let 으로 바꿀경우 let은 블록단위 스코프를 가지기 때문에 i의 값은 for 안에서 사용된다.
그러므로 정상적으로 i는 0,1,2,3,4 가 출력되게된다.

좋은 웹페이지 즐겨찾기