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);
相关文章
相关标签/搜索