2016-04-25 6 views
0

が他のコード誰かが解決策として掲載されます。具体的にforループでgetJSONを使用すると、なぜcounterの値を保持する関数を割り当てる必要がありますか?ここで

for (var i = 0; i < array.length; i++) { 
(function(i) { // protects i in an immediately called function 
    $.getJSON('/api.php?action=query&list=querypage&qppage=' + array[i] + '&format=json', function (data) { 
    $('#' + array[i]).text(data.query.querypage.results.length); 
    }); 
})(i); 
} 

、(i)は、関数の最後に何をするのでしょうか?

+0

非同期なので – adeneo

+1

[JavaScript閉ループ内の簡単な実例](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – adeneo

+1

あなたは渡しています引数としてのIIFEへのループインデックスは、その関数のローカルスコープになります。 – Andy

答えて

0

短い答えは、iの値は、それ以降の関数呼び出しでは期待しない値です。クロージャー((i))を削除すると、すべてが即座に実行されるため(非同期プログラミングの性質など)、常にすべての呼び出しの最大値になります。

この呼び出しの周りに関数を作成してから、の値を持つ関数を呼び出して、getJSONが終了したときの値を保持します。また、ES2015を使用していた場合は、for(let i = 0; ...)を使用して、スコープを処理することに注意してください。

関連する問題