Присоединение параметров с закрытием javascript к параметрам по умолчанию в анонимных функциях - PullRequest
5 голосов
/ 20 октября 2010

Я хочу добавить некоторые дополнительные параметры в вызов API геокодера Google, поскольку я запускаю его в цикле, но не уверен, как добавить параметры замыкания в их анонимную функцию, которая уже имеет параметры по умолчанию, которые передаются вызов API.

Например:

for(var i = 0; i < 5; i++) {
     geocoder.geocode({'address': address}, function(results, status) {
         // Geocoder stuff here
     });
}

Я хочу иметь возможность использовать значение i в переданной анонимной функции geocoder.geocode (), но если бы у меня было замыкание с использованием, например, }(i)); в строке 4, это заменило бы первый параметр, который сломал бы геокодер.

Есть ли способ, которым я могу использовать замыкания или передать значение i в анонимную функцию?

По сути, я хочу сделать следующее:

geocoder.geocode({'address': address}, function(results, status, i) {
    alert(i); // 0, 1, 2, 3, 4
}(i));

но работает: -)

Ответы [ 2 ]

11 голосов
/ 20 октября 2010

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

for(var iter = 0; iter < 5; iter++) {
    (function(i) {
        geocoder.geocode({'address': address}, function(results, status) {
            // Geocoder stuff here
            // you can freely access i here
        });
    })(iter);
}
3 голосов
/ 20 октября 2010
function geoOuter(i) {
    geocoder.geocode({'address': address}, function(results, status) {
         // Geocoder stuff here
         // This has access to i in the outer function, which will be bound to
         // a different value of i for each iteration of the loop
     });
}

for(var i = 0; i < 5; i++) {
    geoOuter(i);
}

Ухта, сделай это ...

...