0

したがって、私の基本的なセットアップは次のとおりです。

for (var i = 0; i < 3; i++) {
    var indices = [-1, -1, -1];
    while (index == -1) {
        // Do Stuff
        index[i] = newIndex;  
    }       
    var press = function() { alert(i); };
    new control({press: press});                
}

アラート(0)、アラート(1)、アラート(2)を取得する代わりに、新しいコントロールをそれぞれ押すと、アラート(3)、アラート(3)、アラート(3)が表示されます。何が起こっているのかなんとなく理解できます。ここで私の質問: 意図したとおりに、さまざまなインデックスを関数に渡すにはどうすればよいですか?

4

2 に答える 2

3

これは、クロージャ変数iのため、解決策はループごとにプライベート クロージャを作成することです。

for (var i = 0; i < 3; i++) {
    var indices = [-1, -1, -1];
    while (index == -1) {
        // Do Stuff
        index[i] = newIndex;  
    }       
    var press = (function(myvar){
        return function() { alert(myvar); };
    })(i);
    new control({press: press});                
}
于 2013-06-12T09:34:55.100 に答える
1

閉鎖を使用する:

var press = (function (x) {
    return function () {
        alert(x);
    };
})(i);

このようにして、現在のi値は安全な場所であるプライベート関数に保存されます。

ループ内で ( を使用してvar) 変数を宣言することは標準的ではないことに注意しpressてください。ループの外で変数を宣言する必要があります。

于 2013-06-12T09:35:46.470 に答える