0
JavaScript 코드가 있습니다. 내가 a[2]()
를 호출하면기능 범위 이해
var a = [];
for (var i = 0; i < 5; i++) {
a[i] = function() {
alert(i);
};
}
a[2]();
나는 2
있는 메시지를 볼 것으로 예상하지만,이 대신에 나는 5
를 참조하십시오.
for (var i = 0; i < 5; i++) {
(function (v) {
a[i] = function() {
alert(v);
}
})(i)
}
그러나 나는 그것이 작동합니까 방법을 이해할 수 없습니다. 그렇다면 왜 함수 코드를 닫아야합니까?
다른 언어에 반대, * JS에서 for' 문 '에서 암시 적 범위가 없습니다. * 익명 함수는, 다른 한편으로는, 자신의 범위가 및 외부 지역 주민을 캡처하기 때문에 따라서 함수 내부에 루프 몸체를 래핑하고 바로 호출하면 문제가 해결됩니다. –
이 경우 * i *가 전역임을 유의하십시오. – RobG
@RobG, 외부 범위로. 우리는 그것이 무엇인지 알지 못합니다. 그것은 글로벌 스코프 일 수도 있고 기능 또는 다른 폐쇄 일 수도 있습니다. –