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

时间:2010-10-20 14:15:42

标签: javascript closures google-geocoder

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

例如:

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

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

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

有效的我想做的是:

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

但正在工作: - )

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:3)

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

Oughta这样做......