定时器: setTimeout 与 setInterval
基本含义
setTimeout
允许我们将函数推迟到一段时间间隔之后再执行。
setInterval
允许我们重复运行一个函数,从一段时间间隔之后开始运行,之后以该时间间隔连续重复运行该函数。
定时器标识符与取消定时器
setInterval
返回一个时间间隔 ID,该 ID 唯一地标识时间间隔,稍后可以通过 clearInterval(ID)
来清除,返回的 intervalID 是一个非零数值。
let timerId = setTimeout(() => alert('never happens'), 1000);
alert(timerId); // 定时器标识符
clearTimeout(timerId); // 在运行前取消了定时器
alert(timerId); // 还是这个标识符(并没有因为调度被取消了而变成 null)
在浏览器中,定时器标识符是一个数字。在其他环境中,可能是其他的东西。例如 Node.js 返回的是一个定时器对象,这个对象包含一系列方法。
setInterval()
和 setTimeout()
共享同一个 ID 池,并且 clearInterval()
和 clearTimeout()
在技术上是可互换使用的。但是,我们必须去匹配 clearInterval()
和 clearTimeout()
对应的 id,以避免代码杂乱无章,增强代码的可维护性。
setInterval 的执行时间
是设定的时间间隔后才开始第一次执行,并不会立即执行,如何让他先立即执行再定时执行呢?
-
常规方法封装一个立即执行的
setInterval
:const target = () => {
console.log('Do something...');
};
target(); //先调用一次然后再setInterval
setInterval(target, 1000);