setInterval调用被废弃或者setInterval的无间隔连续调用

JS定时器深入解析
本文深入探讨了JavaScript中定时器setInterval的工作原理及其在单线程环境中的行为表现。通过具体示例说明了当定时器处理时间超过设定间隔时可能产生的问题,并提供了关于如何在前端框架如Vue和React中正确使用定时器的建议。

setInterval调用被废弃和无间隔重连续调用,都是js的单线程引起的。

1.首先来讲setInterval调用被废弃的原因。

js是单线程,因此只能在执行完同步script之后才能执行异步的事件回调,例如promise、ajax、setInterval、setTimeout等等。主线程在执行同步代码的时候,有事件触发了,此事件的回调函数必须进入执行栈等待执行,而进入执行栈的函数的执行遵循:
1.先进先出原则。
2.浏览器不会对同一个setInterval处理程序多次添加到待执行队列。 假如有以下代码:

let a = 1;
let time1 = new Date();
for(let i = 0; i< 1000000000 ; i ++){//执行此循环大概需1.3s
    a = 1;
}
setTimeout(() => {
    let time2 = new Date();
    let time3 = time2 - time1;
    console.log('我是setTimeout', time3 );//2340
    for(let i = 0; i< 1000000000 ; i ++){//执行此循环大概需2s
        a = 1;
    }
}, 1000);
setInterval(() => {
  let time4 = new Date();
  let time5 = time4 - time1;
  console.log("I'm  setInterval,", time5);//4540
  for(let i = 0; i< 1000000000 ; i ++){//执行此循环大概需2s
      a = 1;
  }
}, 1000)
复制代码

setInterval的处理时长不能比设定的间隔长,否则setInterval将会没有间隔的重复执行。

注:一般的话,路由跳转无法销毁setInterval和setTimeout等全局方法(因为它们属于window的方法),所以在使用vue和react native、react等框架时,路由的跳转之前,要清空定时器。

明天写。。。。困了,先睡了

本文的参考文章是OBKoro1大大的文章--JS忍者秘籍中的定时器机制详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值