JS有两种定时器,setTimeout 和 setInterval,两者的使用方式和参数都相同,但是执行次数不同。
setTimeout在到达时间后只会执行一次,而setInterval则是每隔一段时间就会执行一次,是循环定时器。
清除定时器
我们可以用 clearTimeout 和 clearInterval 来取消两种定时器,前提是设置定时器时必须用一个变量来接受定时器的编号,才能用clear方法指定取消哪一个定时器。
let a = setTimeout(()=>{},300) //设置定时器,并用变量接受id
clearTimeout(a) // 这样就能取消定时器了
// setInterval 也是同理
let a = setInterval(()=>{},300) //设置定时器,并用变量接受id
clearInterval(a) // 这样就能取消定时器了
优化方案
虽然setInterval看上去很方便,但是无限循环终究是有弊端的,它会导致回调累积,最后的执行速度会越来越慢,而且使用clearInterval往往还不能立刻停止定时器。
所以,我们一般用可控的递归调用 setTimeout() 来代替 setInterval()