클로저 문제 => 스코프, 비동기, var
'클로저가 문제다' 아니다.
클로저를 사용해서 문제를 해결한다.
반복문과 비동기를 함께 사용하면 문제가 종종 발생
function a() {
for (var i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
}
a();
3
3
3
이 출력된다.
var 가 함수 스코프이기 때문에
var => let 면 해결된다. 하지만 이는 클로저로 해결한 것이 아니다.
function a() {
for (let i = 0; i < 3; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
}
a();
0
1
2
이 출련된다.
let 말고 즉시실행함수로 클로저 생성해서 해결할 수 있다.
function a() {
for (var i = 0; i < 3; i++) {
(function(k) {
setTimeout(() => {
console.log(k);
}, i * 1000);
})(i);
}
}
a();
0
1
2
이 출련된다.
var 과 반복문과 비동기가 문제를 만듬
클로저 : 함수와 외부 변수와의 관계