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
的。閉環影響循環中閉合函數中的變量
任何人都可以看到有什麼問題嗎?
聲明「閉包正在影響所有事情,而不僅僅是這一點」並未描述問題 - 閉包如何工作。封閉範圍中的所有變量都包含在閉包中。 – nrabinowitz 2012-03-15 18:25:41
請使用更具描述性的內容修改問題的標題。我認爲你應該提到術語'for循環' – viebel 2012-03-15 18:37:04
重複http://stackoverflow.com/questions/2192348/closures-in-a-for-loop – viebel 2012-03-16 10:56:56