클로저 문제 해결법
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