5

ループで実行しているため、GoogleジオコーダーAPI呼び出しにいくつかのパラメーターを追加したいのですが、呼び出しによって渡されるデフォルトのパラメーターが既にある匿名関数にクロージャーパラメーターを追加する方法がわかりません。 API。

例えば:

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

渡されたgeocoder.geocode()無名関数でiの値を使用できるようにしたいのですが、}(i));たとえば4行目でクロージャを使用すると、ジオコーダーを壊す最初のパラメーターが置き換えられます。

クロージャを使用したり、iの値を無名関数に渡す方法はありますか?

事実上、私がやりたいことは次のとおりです。

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

しかし、働いています:-)

4

2 に答える 2

11

匿名関数から(クロージャーを介して)直接アクセスできますが、への各呼び出しが独自のコピーを取得iできるように、それをキャプチャする必要があります。geocodejavascriptでいつものように、別の関数を追加するとうまくいきます。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);
}
于 2010-10-20T14:27:48.917 に答える
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やる...

于 2010-10-20T14:26:24.830 に答える