成功関数内のローカル変数を参照する for ループ内の配列に遅延 getJSON 呼び出しを追加しています。私が抱えている問題は、成功関数が呼び出されたときに、ローカル変数がループの最後の反復から値を取得していることです。以下の例を参照してください。
var calls = [];
var arr = ['a','b','c'];
for (var a in arr) {
calls.push(
$.getJSON(window.location, function() { alert(arr[a]); })
);
}
$.when.apply($,calls);
jsFiddle: http://jsfiddle.net/Me5rV/
これにより、値「c」の 3 つのアラートが生成されますが、値「a」、「b」、および「c」が必要です。これは可能ですか?
編集:以下は機能しますが、なぜこれが異なるのか完全にはわかりませんか?
var calls = [];
var arr = ['a','b','c'];
for (var a in arr) {
calls.push(
$.getJSON(window.location, function(x) {
alert(x);
}(arr[a]))
);
}
$.when.apply($,calls);
jsFiddle: http://jsfiddle.net/Me5rV/1/