변수는 스코프를 가진다.
var는 함수 스코프를 가지고, let은 블록 스코프를 가진다.
for (var i = 0; i < 5 ; i++) {
console.log(i)
}
// i = 5
반복문은 매우 빠르게 돌기 때문에 i는 6 이 되버린다.
for (var i = 0; i < winBalls.length; i++){
setTimeout(() => {
console.log(winBalls[i], i);
drawBall(winBalls[i], $resulte);
}, (i+1) * 1000);
}
}
let은 블록스코프라서 고정이되고
var은 함수스코프라서 고정이 되지 않는다.
for (var i = 0; i < winBalls.length; i++){
(function(j) {
setTimeout(() => {
console.log(winBalls[j], j);
drawBall(winBalls[j], $resulte);
}, (i+1) * 1000);
}
})(i);
}
함수와 함수 바깥에 있는 것(변수)들과의 관계
클로저문제 클로저가 문제가 아니라 클로저로 문제를 해결하는 것을 의미
함수 스코프를 가진 var와 비동기함수가 만나면 closer가 발생한다!
var보다는 let을 쓰는 것이 좋다.
$tag.style.backgroundColor = 'red';
$tag.style.color = 'white';