2011-06-23 23 views
0

私はこのようなコードを持っている:共有データの問題

var increment = 200; 

for (var j=0; j<10; j++){ 

    var print = function(){ console.log("===== J ===== "+j); } 

    setTimeout(print, increment); 

    increment+= 200; 

} 

コンソールいつも私はその文とのsetTimeoutのためになると思う10の印刷は、異なるスレッドで実行されています。正しい値のjを印刷するにはどうすればよいですか?

ありがとうございます。

+0

質問を明確にすることはできますか?あなたのコードでは "10"だけしか表示されず、変数 'i'も表示されません。 –

答えて

1

これは標準バインディングの問題です。多くのsimilar questionsがstackoverflowにあります。

基本的に、すべての値に1つの 'j'が使用されています。代わりにこれを試してみてください:

function getBoundLog(j) 
{ 
    return function(){console.log("===== J ===== "+j);} 
} 
var increment = 200; 

for (var j=0; j<10; j++){ 

    setTimeout(getBoundLog(j), increment); 

    increment+= 200; 

} 
1

あなたはスコープに問題があると思います。基本的にはprint関数を10回以上書くことになります。関数が呼び出されるまでにsetTimeout関数を呼び出すのを待つので実際には

var print = function(){ console.log("===== J ===== "+10); } 
関連する問題