가능한 중복 :
Javascript closure inside loops - simple practical example자바 스크립트 원치 않는 폐쇄 동작
나는이 비슷한 코드를하려고했다 : funcs[0]
를 호출, 분명히
var funcs = [];
for (var i=0; i<5 ; ++i) {
funcs[i]=function() {
alert(i);
};
}
을 경고하지 않습니다 0
을 예상대로 사용하면 변수 i
은 익명의 함수에 의해 캡처되고 funcs[0..4]
중 하나를 호출하면 '4'가 표시됩니다 (마지막 반복 후 i
의 값이며 모든 생성 된 함수에서 공유 됨).
var funcs = [];
for (var i=0; i<5 ; ++i) {
funcs[i]=(function(cap) {
return function() {alert(cap)};
})(i);
}
이 트릭을 할,하지만 정말 수수께끼 읽기 어려운 것 같다
그 주위 첫 번째 작업은 함수 발생기의 어떤 종류를 사용하고 내 마음에 온다. 함수 래퍼를 사용하지 않고 의도 한 동작을 얻는 더 좋은 방법이 있습니까?
function 문 다음에'funcs [i] .i = i;'를 사용할 수 없습니까? –
(Chrome 21/Mac 10.7) http://jsfiddle.net/VDm5C/ –
Nop, 내가 실제로 작업하고 있기 때문에 범위가 'funcs [i]'함수를 호출 할 때 설정되기 때문에 . 콜 (someObject, ..)'. 이것은'this'를 오버라이드 할 것이고'this.i'는 접근 할 수 없을 것입니다. – sitifensys