代码实现:setTimeOut实现setInterval

先来看下两者的简介:

setTimeout:在指定的毫秒数之后调用函数或计算表达式。

setInterval:按照指定的周期(以毫秒计)来调用函数或计算表达式。

简单理解为setTimeout只执行一次,而setInterval可以按周期一直执行。

setInterval的缺陷

1、推入任务队列后的时间不准确:在 setInterval 被推入任务队列时,如果在它前面有很多任务或者某个任务等待时间较长比如网络请求等,那么这个定时器的执行时间和我们预定它执行的时间可能并不一致。

2、函数操作耗时过长会导致不准确:假如定时器里面的代码需要进行大量的计算(耗费时间较长),或者是 DOM 操作。这样一来,花的时间就比较长,有可能前一次代码还没有执行完,后一次代码就被添加到队列了。也会导致定时器变得不准确,甚至出现同一时间执行两次的情况

所以我们通常会希望使用setTimeout实现setInterval,因为:每个 setTimeout 产生的任务会直接 push 到任务队列中

 利用setTimeout实现setInterval

function mySetTimeout(func,delay){
  //声明timer,用于后面清除定时器
  let timer = null
  const interval = () =>{
    //执行对应传入函数
    func()
    //用timer接收setTimeout返回的定时器编号
    //setTimeout接收in
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值