2017-04-09 50 views
0

我想在setInterval中使用setTimeout。第一次打印out_k:0。間隔後,它打印out_k:1,inside_k:0?我不明白,我認爲inside_k應該是。 ouside k是,它很奇怪。在setInterval中使用setTimeout時出現問題

 var i = 0; 
    var timer = setInterval(function(){ 
     if(i < arr.length){ 
      var k=i; 
      //console.log("out_i:"+i); 
      console.log("out_k:"+k);     
      setTimeout(function(){ 
       //console.log("inside_i:"+i); 
       console.log("inside_k:"+k); 
      },500); 
      i++; 
     }else { 
      clearInterval(timer); 
     } 
    },500); 
+0

什麼是'arr.length'? – gurvinder372

回答

1

這是事件的代碼的執行

1)排隊的setInterval第一個實例500ms的

2)500ms的後後要執行期間的順序,它排隊第二setInterval的實例並執行第一setInterval的實例和打印out_k0。它也排隊setTimeout 500毫秒後執行以及k的值仍然爲0時。 500ms的

3)後,將其排隊第三實例的setInterval和由於k的值是1,現在執行的setInterval並打印out_k1秒實例,但setTimeout第一個實例也與inside_k0

等執行。

+0

你的意思是setTimeout在排隊時得到了k的值嗎?但是如果我把k改成i,那麼執行的時候就會得到i的值。 – UTRANANA