次のタスクを実行する必要があります。しかし、これは常に 1、2、3、4 および 5 ではなく「5」のみを警告します。これを修正するにはどうすればよいですか? 助けてください。
for(var x=1; x<=5; x++){
something.load(function(result){
alert(x);
});
}
次のタスクを実行する必要があります。しかし、これは常に 1、2、3、4 および 5 ではなく「5」のみを警告します。これを修正するにはどうすればよいですか? 助けてください。
for(var x=1; x<=5; x++){
something.load(function(result){
alert(x);
});
}
これは閉鎖によるものです。コールバックが実行されると、現在の状態で変数を警告します (つまり、ループの後)。
これを修正するには、変数の状態を保持する新しいクロージャーを作成します。
for(var x=1; x<=5; x++){
(function(x) {
something.load(function(result){
alert(x);
});
}(x));
}
Closure のより完全な説明については、この SO の質問を参照してください: JavaScript クロージャはどのように機能しますか?
または、TC39 (EcmaScript 標準化団体) のメンバーによるこの記事http://www.2ality.com/2013/05/quirk-closures.html