2014-03-05 64 views
1

這個問題似乎超級原始,但我無法弄清楚。如何在for循環中使用索引變量創建函數?

我有這樣的代碼。我期望的結果是三個警報「0」,「1」和「2」。但是,這不是發生了什麼 - 我得到三個2。

for(var i=0; i<3; i++) { 

    var j=i; 
    setTimeout(function() { 

     alert(j); 

    },1000); 
} 

該代碼在http://jsfiddle.net/8UMCA/

如何「修復」代碼,以便提醒「0」 - 「1」 - 「2」?

+1

你需要創建一個封閉:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – rgthree

回答

1

或者這

for(var i=0; i<3; i++) {   

     (function(){ 
      var j=i; 
      setTimeout(function() { 

      alert(j); 

     },1000);   
     } 
     )(); 



    } 
1

這讓它工作。

for(var i=0; i<3; i++) { 
    setTimeout(function(j) { 

     alert(j); 

    }(i),1000); 
} 
相關問題