阅读 112

setInterval的delay

每天做个总结吧,坚持就是胜利!

    /**
        @date 2021-07-13
        @description setInterval的delay
    */
复制代码

壹(序)

setInterval用于重复的执行一个函数或者一部分代码段。

使用setInterval时,可以传入一个delay做为定时器的间隔时间,每delay毫秒后执行一次函数或代码段,MDN上对这个参数的说明如下:

是每次延迟的毫秒数 (一秒等于1000毫秒),函数的每次调用会在该延迟之后发生。
和setTimeout一样,实际的延迟时间可能会稍长一点。
这个时间计算单位是毫秒(千分之一秒),这个定时器会使指定方法或者代码段执行的时候进行时间延迟。
如果这个参数值小于10,则默认使用值为10。
复制代码

今天与人聊到delay这个参数时,我根据MDN上的描述说最小值为10,但是没被认同,所以决定验证以下。

怎么可以验证呢,我想到用setTimeout定时清理setInterval定时器,看setInterval中执行了多少次,代码如下:

let counter = 0;
const timer = setInterval(() => {
    counter++;
    console.log(counter);
}, 10);

setTimeout(() => {
    clearInterval(timer)
}, 1000);
复制代码

在Chrome(version:91)中执行记录如下:

delay   timer  last-print
1000    10     1
600     10     1
501     10     1
500     10     2
400     10     2
300     10     3
250     10     4
200     10     5(8)/4(2)
100     10     10
10      10     100
复制代码

目前还算是正常,10以下记录如下:

delay   timer   last-print
9       10      111
8       10      125(9)/124(1)
5       10      199(5)/198(3)/197(2) 
1       10      250(6)/249(3)/247(1)
0       10      250(9)/248(1)
-1      10      250(8)/248(1)/246(1)
复制代码

从以上可以知道的是,Chrome(version:91)对于setInterval的实现对于处理delay参数时,并不是基于10做最小值计算,大概是4。

下次聊到setInterval可以讲一下这个点。

文章分类
前端
文章标签