修复定时器 setInterval 加速执行

1868°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

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


评论留言

avatar
「 涂鸦画板 」 关闭表情 bilibili 小电视
h0h1h2h3h4h5h6h7h8h9h10h11h12h13h14h15h16h17h18h19h20h21h22h23h24h25h26h27h28h29h30h31h32h33h34h35h36h37h38h39h40h41h42h43h44h45h46h47h48h49h50h51h52h53h54h55h56h57h58h59h60h61h62h63
3 条评论
user_avatar
rfx Chrome / Windows 10
2021-01-17 回复

买单号,上单号网www.baidu.com

user_avatar
rth Chrome / Windows 10
2021-01-12 回复

0.1元快递单号网 一毛钱快递代发空包网站 真实代发网站www.

user_avatar
dafg Chrome / Windows 7
2020-12-05 回复

快递代发,礼品代发,单号购买网www.baidu.com