0

重複の可能性:
ループ内の Javascript クロージャー - 簡単な実用例

javascript の変数のスコープを理解するのに苦労しているようです。

次のコードがあります。

for (var i =2; i< 5;i++){
    var k = (i+1).toString()
    window['graph.point'+i].onMove = function(x,y){
        return [min(x,window['graph.point'+k].coord[0]],f(min(x,window['graph.point'+k].coord[0]))]}
    }
}

このコードは、グラフ上にあるいくつかの可動ポイントの可能な位置にいくつかの制約を課すことになっています。問題は、graph.point オブジェクトが制約が満たされているかどうかを確認するときに、k の最後の値である 6 を使用することです。これらのオブジェクトが想定されている k の値を使用していることを確認するにはどうすればよいですか? ?

4

1 に答える 1

2

forブロックには独自の変数スコープがないため、即時関数を使用して新しいスコープを作成する必要があります。

for (var i =2; i< 5;i++){
    var k = (i+1).toString();
    (function(k, i) {
        window['graph.point'+i].onMove = function(x,y){
            return [min(x,window['graph.point'+k].coord[0]],f(min(x,window['graph.point'+k].coord[0]))]}
        }
    })(k, i);
}
于 2012-08-17T02:25:52.940 に答える