修复定时器 setInterval 加速执行

979°C 17-11-2020 notbyai
最近更新于:2022-06-15 23:44:36

文章摘要moonshot-v1-8k

Standby API Responsing..

定时器

JS 中有 setTimeout  setInterval 两种常见的定时器, setTimeout 只执行一次, setInterval 会在规定的条件内反复执行以实现不同需求。这次聊的算是老生常谈的问题了,很久以前就知道 setInterval 存在这个问题,当时也各种 stackoverflow 不过具体忘记咋处理的了。现在又突然遇到 setInterval 反复执行越来越快这种情况,顺便记录下。

JavaScript 定时器

setInterval

模拟一个错误使用 setinterval 场景

var timer,  //预设定时器为全局变量
    setup=function(){
        timer=setInterval(function(){
            console.log('repeat this interval 3000/pms.')
        }, 3000)
    },
    clear=function(){
        clearInterval(timer)
    };
setup();  //连续执行多次 setup() 触发定时器加速
clear();  //此时再执行 clear() 无效

正确使用 setinterval

var timer,  //预设定时器为全局变量
    setup=function(){
        timer=setInterval(function(){
            console.log('repeat this interval 3000/pms.');
            //clearInterval(timer)  //定时器执行完后内部销毁
        }, 3000)
    },
    clear=function(){
        clearInterval(timer)
    },
    run=function(){
        clear();  //如果设定过定时器则先清除
        setup();  //再执行定时器设定
    };
run()  //每次 setup() 前都执行一次 clear()

没错就这么简单,我估计之前没搞对的地方主要是变量作用域这块没弄清楚。

小记

  • 将定时器名称预设到全局变量,用于执行前清除和执行后清除
  • 使用 setInterval 前先清理一遍已设定的 Interval

以上,有问题在评论区反馈。


评论留言

既来之则留之~ 欢迎在下方留言评论,提交评论后还可以撤销或重新编辑。(Valine 会自动保存您的评论信息到浏览器)