2012-03-30 7 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を」が呼び出されると、3番目のパラメータは常に機能の作成に使用最後の値を(値は常に0,1,2,3,4,6と私のようなものがあります受信6)。

どうすればこの問題を解決できますか?

ありがとうございました

+0

質問の回答は簡単ですが、問題は解決しません。何をしようとしていますか?なぜあなたは 'curitem 'ごとに' tl'を作り直していますか? –

+2

'array'が実際の' Array'で、 'Object'ではなく' for..in'を使うのは悪い考えです!代わりに 'for(var i = 0; i ThiefMaster

+0

私は別のタイルのURLを持っているので、私はそれを再作成します(マップ上に多くの顧客定義データをロードする必要があります)。 – AndreaCi

答えて

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