使用setTimeout模拟setInterval

这里说一下为什么要用setTimeout模拟setInterval

场景再现

如果使用setInterval,里面的回调函数中,需要执行比较长的事件,例如setInterval一个1秒钟的时间,然后callback中需要执行3秒,下一个setInterval并不会等待上一个的setInterval的callback执行完毕才执行,这样就有可能出现同一时间触发多次setInterval的callback,然后导致页面的奇怪现象。另外这样也容易造成内存溢出。而使用setTimeout代替setInterval,在setTimeout的callback中,知心完后重新新建一个setTimeout。这样就保证了每一次只会有一个定时任务执行。


1.setInterval 每到一个周期结束时就会使用clearInterval()来清除这个周期函数,然后重新生成一个新的周期函数,赋予它新的周期,从而实现动态修改周期函数的周期的目的
2. setInterval 这个方法去实现计时,但是有一个缺点,虽然能设置隔一段时间后不断执行,但是实际上只是将事件放消息队列,真正执行的时间并不确定,有可能上一个计时器任务没执行完又进来一个计时器任务,所以并不能保证能按照设定的时间去执行,

//暂停执行标记
let stop=false;
//调用定时器执行
  this.Interval();
  //暂时定时器的定时器
    setTimeout(()=>{
         stop=true;
    },5000);
// 使用setTimeout模拟setInterval
 function  Interval(){
// 停止的条件
if (stop) { return;}
setTimeout(()=>{
console.log(new Date().getTime());
//调用自身
this.Interval()
},500)
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端J先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值