2017-04-09 53 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