setTimeout和setInterval

原本這兩個也沒什麼好說的 用法之類的自行看文檔瀏覽器

這裏說說用setTimeout模擬setInterval spa

爲何要模擬呢.用過setInterval的人可能會有這個需求code

  • 看緣由

setInterval指定的是,「開始執行」之間的間隔,所以實際上,兩次執行之間的間隔會小於setInterval指定的時間。假定setInterval指定,每100毫秒執行一次,每次執行須要5毫秒,那麼第一次執行結束後95毫秒,第二次執行就會開始。若是某次執行耗時特別長,好比須要105毫秒,那麼它結束後,下一次執行就會當即開始。blog

 
var i = 1;
 
var timer = setInterval(function() {
 
alert(i++);
 
}, 2000);

 

上面代碼每隔2000毫秒,就跳出一個alert對話框。若是用戶一直不點擊「肯定」,整個瀏覽器就處於「堵塞」狀態,後面的執行就一直沒法觸發,將會累積起來。舉例來講,第一次跳出alert對話框後,用戶過了6000毫秒才點擊「肯定」,那麼第二次、第三次、第四次執行將累積起來,它們之間不會再有等待間隔。文檔

  • 爲了確保兩次執行之間有固定的間隔上面的代碼能夠改寫成以下
var i = 1;
var timer = setTimeout(function() {
  alert(i++);
  timer = setTimeout(arguments.callee, 2000);
}, 2000)

 

最後it

  • 看用setTimeout模擬setInterval 代碼
function interval(func, wait){
  var interv = function(w){
    return function(){
      setTimeout(interv, w);
      func.call(null);
    }
  }(wait);
 
  setTimeout(interv, wait);
}
 
interval(function(){
  console.log(2);
},1000);
相關文章
相關標籤/搜索