클로저 문제 해결법

Solution for Closure problem

함수가 기준이 되고, 스코프 체인을 따라 변수를 찾고 비동기콜백함수는 실행되는 순간에 그 변수값을 찾는다.

for(var i = 0; i < 100; i++) {
    function 클로저(j) {
     setTimeout(function() {
      console.log(j);
     }, j * 1000);
    }
    클로저(i);
}
    function 클로저(j) {//j=0
     setTimeout(function() {
      console.log(j);//j는 죽었다 깨어나도 1번째줄 j->0
     }, 0 * 1000);
    }
    클로저(0);
    function 클로저(j) {//j=1
     setTimeout(function() {//j는 죽었다 깨어나도 1번째줄 j->1
      console.log(j);
     }, 1 * 1000);
    }
    클로저(0);
    function 클로저(j) {//j=2
     setTimeout(function() {//j는 죽었다 깨어나도 1번째줄 j->2
      console.log(j);
     }, 2 * 1000);
    }
    클로저(0);
    function 클로저(j) {//j=3
     setTimeout(function() {//j는 죽었다 깨어나도 1번째줄 j->3
      console.log(j);
     }, 3 * 1000);
    }
    클로저(0);

로또추첨 클로저 문제

for(var i = 0; i < 당첨숫자들.length;i++) {
    setTimeout(function() {
        공색칠하기(당첨숫자들[i], 결과창);
    },(i+1) * 1000);
}

로또추첨 클로저 문제 수정 및 해결

for(var i = 0; i < 당첨숫자들.length;i++) {
    function 클로저(j) {
        setTimeout(function() {
            공색칠하기(당첨숫자들[j], 결과창);
        },(j+1) * 1000);
    }
    클로저(i);
}
for(var i = 0; i < 당첨숫자들.length;i++) {
    (function 클로저(j) {
        setTimeout(function() {
            공색칠하기(당첨숫자들[j], 결과창);
        },(j+1) * 1000);
    })(i);//선언과 동시에 즉시 실행
}

Last updated