2

次のタスクを実行する必要があります。しかし、これは常に 1、2、3、4 および 5 ではなく「5」のみを警告します。これを修正するにはどうすればよいですか? 助けてください。

    for(var x=1; x<=5; x++){
        something.load(function(result){
            alert(x);
        });
    }
4

1 に答える 1

9

これは閉鎖によるものです。コールバックが実行されると、現在の状態で変数を警告します (つまり、ループの後)。

これを修正するには、変数の状態を保持する新しいクロージャーを作成します。

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

于 2013-10-10T17:40:24.863 に答える