2012-03-30 36 views
2

Javascript中的文字函數有問題。Javascript文字函數

for (curitem in array) 
    { 
     var tl = new GTileLayer(copyrightCollection, 0, 21); 

     tl.getTileUrl = function(a, b) { 
       return MyFunction(a, b, curitem); 
      }; 

     ... 

     secondArray.push(tl); 
    } 

的問題是:當「MyFunction的」之稱,第三個參數始終在創建函數的使用最後一個值(值是像0,1,2,3,4,6,我總是接收6)。

我該如何解決這個問題?

謝謝

+0

回答問題很簡單,但不會解決問題。你打算髮生什麼事?爲什麼你爲每個「curitem」重新創建'tl'? – 2012-03-30 10:08:45

+2

如果'array'是一個實際的'Array'而不是'Object',那麼使用'for..in'是一個壞主意!改用'for(var i = 0; i ThiefMaster 2012-03-30 10:10:10

+0

我重新創建它,因爲我有不同的瓷磚網址(我必須在地圖上加載許多客戶定義的數據)。 – AndreaCi 2012-03-30 10:17:42

回答

4

循環和閉包的經典問題。您可以通過每個循環創建一個新變量輕鬆解決它,例如通過使用匿名函數並將該值作爲參數傳遞:

for (var curitem in array) { 
    var tl = new GTileLayer(copyrightCollection, 0, 21); 

    (function(curitem) { 
     tl.getTileUrl = function(a, b) { 
      return MyFunction(a, b, currentitem); 
     }; 
    })(curitem); 

    // ... 

    secondArray.push(tl); 
} 
+1

謝謝,它的工作原理! – AndreaCi 2012-03-30 10:19:41