2016-01-17 98 views
-1

我知道爲什麼這不起作用,但找不到正確的做法。簡單的Javascript關閉問題

我想使用循環建立一個對象。 對象構建正常,但是當我嘗試使用回調時,它會爲每個人發出「2」警告,我希望它警告數組中的位置。

var playerArr = ["steve", "paul", "bob"]; 

var myAutomatedObj = {}; 
for (var i=0; i<playerArr.length; i++){ 
    var objName = playerArr[i]; 
    myAutomatedObj[objName] = {}; 
    myAutomatedObj[objName]["callback"] = function(){ 
     alert(i); 
    } 
} 

//returns incorrect alert 
myAutomatedObj.steve.callback(); 
+0

功能已懸掛。 –

+0

使用'playerArr.forEach'。 –

+1

@ DanielA.White - 函數聲明被掛起,但問題中沒有任何聲明。 – Quentin

回答

1

屬性i由每個功能引用,因爲它是在其範圍,但其值等於所述陣列的長度在循環的結束。

嘗試以下操作:

myAutomatedObj[objName]["callback"] = (function(j) { 
    return function(){ 
     alert(j); 
    } 
})(i); 

這樣你實際上覆制的價值,你就不再引用命名i變量。

+0

不能夠感謝你 - 我知道發生了什麼,但沒有如何阻止它 - 當我允許(10分鐘)時,我會接受這個答案。 – Richard