Javascript буквенные функции - PullRequest
2 голосов
/ 30 марта 2012

У меня проблема с функциями Javascript Literal.

    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).

Как я могу решить эту проблему?

Спасибо

1 Ответ

4 голосов
/ 30 марта 2012

Классическая задача с петлями и замыканиями.Вы можете легко решить эту проблему, создавая новую переменную каждый цикл, например, используя анонимную функцию и передавая значение в качестве параметра:

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);
}
...