我正在使用基於Dojo的Esri的Javascript庫3.10。我遇到範圍問題,儘管嘗試了不同的變化,但我仍然有同樣的結果。可能有更好的方法來做到這一點,但我似乎無法弄清楚。Dojo「On」複選框更改內部for循環範圍問題
我想通過一個包含鍵的對象遍歷一組複選框,然後使用dojo/on分配一個事件處理函數來設置基於該鍵的值,但是,On()中的鍵「setting」。 ..)函數對於所有四次迭代都是相同的。
for (var setting in this.appSettings) {
console.log(setting); //prints four different things
if (this.hasOwnProperty(setting)) {
this.checkboxHandles[setting] =
On(this[setting], 'change', function (checked) {
//this.setValue(setting, checked)
console.log(setting) //prints the last 'setting' whenever checkbox is changed
});
}
}
因此,在On函數內部設置始終是相同的值,即使for循環通過四個唯一鍵循環。首先,爲什麼會發生這種情況,有什麼建議可以解決這個問題?
感謝您的出色答案!我以前肯定聽說過並看到過關閉,但從來沒有遇到過實際情況(或者我認爲)。 – roemhildtg 2014-09-19 14:19:45
沒問題,將IIFE放在你的腳本文件中是一種常見的做法。例如,很多jQuery插件都是這樣做的,因爲它們是按值傳遞jQuery對象的,所以以後不能更改它。 – g00glen00b 2014-09-19 15:57:43