2011-06-23 101 views
0

我有這樣的代碼:共享數據問題

var increment = 200; 

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

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

    setTimeout(print, increment); 

    increment+= 200; 

} 

控制檯隨時打印10.我認爲這可能是for語句和setTimeout的是在不同的線程中執行。我如何才能打印j的正確值?

在此先感謝。

+0

你能澄清你的問題嗎?我沒有看到代碼中只會打印「10」並且沒有變量「i」的任何內容。 –

回答

1

這是一個標準的綁定問題,你可以在stackoverflow上找到很多similar questions

基本上,它使用一個'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

你有我認爲的範圍問題。你基本上在寫10次打印功能,因爲你等待調用setTimeout的功能時,它被稱爲功能實際上是

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