this.config = {
source: psource,
_events: [
'value1',
'value2',
'value3'
]
};
// Add callbacks to source
var that = this;
for (var i = this.config._events.length - 1; i >= 0; i--) {
var name = this.config._events[i];
console.log(name); // correct
$(this.config.source).on(name, function() {
console.log(name); // value1
console.log(that.config._events[i]); // undefined
});
}
여기서 무엇이 잘못되었는지 알 수 없습니다. 모든 복잡한 버전을 제거하고 가장 단순하게 넣었습니다. 전혀 작동하지 않으려 고합니다. 첫 번째 console.log
은 모든 올바른 이름을 올바르게 출력하지만 루프가 한꺼번에 발생하는 것처럼 작동 한 다음 내측 console.log
의 경우 다시 수행합니다.루프 내 닫힌 함수의 변수에 영향을주는 클로저
누구든지 잘못된 것을 볼 수 있습니까?
console.log(that.config._events[i]); // undefined
i
가되고 -1 당신의 폐쇄가 호출 될 때마다 끝날 것이라고 블록에서
"클로저가 모든 것에 영향을 미치고 있습니다."라는 문구는 문제를 설명하지 않고 클로저가 작동하는 방식입니다. 닫는 범위의 모든 변수는 클로저에 포함됩니다. – nrabinowitz
질문의 제목을보다 구체적으로 수정하십시오. 나는 당신이 'for loop'이라는 단어를 언급해야한다고 생각합니다. – viebel
http://stackoverflow.com/questions/2192348/closures-in-a-for-loop – viebel