setTimeout和setInterval

本来这两个也没什么好说的 用法之类的自行看文档

这里说说用setTimeout模拟setInterval 

为什么要模拟呢.用过setInterval的人可能会有这个需求

  • 看原因

setInterval指定的是,“开始执行”之间的间隔,因此实际上,两次执行之间的间隔会小于setInterval指定的时间。假定setInterval指定,每100毫秒执行一次,每次执行需要5毫秒,那么第一次执行结束后95毫秒,第二次执行就会开始。如果某次执行耗时特别长,比如需要105毫秒,那么它结束后,下一次执行就会立即开始。

 
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)

 

最后

  • 看用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);

 

posted on 2019-07-04 09:33  含蓄的龅牙妹  阅读(167)  评论(0编辑  收藏  举报

导航