使用javascript闭包将参数附加到匿名函数中的默认参数

Whe*_*rdy 5 javascript closures google-geocoder

我想在Google地理编码器API调用中添加一些额外的参数,因为我在循环中运行它,但我不知道如何将闭包参数附加到已经具有默认参数的匿名函数,该默认参数通过调用传入API.

例如:

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

我希望能够在传递的geocoder.geocode()匿名函数中使用i的值,但是如果我}(i));在第4行使用了一个闭包,例如它将替换第一个会破坏地理编码器的参数.

有没有办法可以使用闭包,或者将i的值传递给匿名函数?

有效的我想做的是:

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

但工作:-)

Gab*_*art 11

您可以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);
}
Run Code Online (Sandbox Code Playgroud)