每天做个总结吧,坚持就是胜利!
/**
@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可以讲一下这个点。