重複の可能性:
ループ内の Javascript クロージャー - 簡単な実用例
私はこれに似たものをコーディングしようとしていました:
var funcs = [];
for (var i=0; i<5 ; ++i) {
funcs[i]=function() {
alert(i);
};
}
明らかに、変数が無名関数によってキャプチャされ、いずれかを呼び出すと、'4' (最後の反復の後の値であり、作成されたすべての関数によって共有される)がアラートされるため、呼び出しは期待どおりにfuncs[0]
アラートしません。0
i
funcs[0..4]
i
私の頭に浮かぶ最初の回避策は、ある種の関数ジェネレーターを使用することです:
var funcs = [];
for (var i=0; i<5 ; ++i) {
funcs[i]=(function(cap) {
return function() {alert(cap)};
})(i);
}
これでうまくいきますが、本当に不可解で読みにくいようです。関数ラッパーを使用せずに意図した動作を取得するより良い方法はありますか?