用法
- 第一个参数是传入的函数
- 第二个参数是 间隔的以毫秒为单位的时间
- 后面的是一系列的参数
- handler之外的参数直接不传
setInterval((...args)=>{
args.forEach(val=>{
console.log(val)
})
}, 1000,"arg0","arg1","arg2")
垃圾回收和 setInterval/setTimeout 回调
当一个函数被传入 setInterval/setTimeout 中时,会为该函数创建一个内部引用并保存在调度程序中。这种方式能够防止垃圾回收器 (GC)将其回收,即使这个函数在外部没有其他引用。
// 在调度程序调用这个函数之前,这个函数将一直存在于内存中
setTimeout(()=>{
// 函数体
}, 100);
- 对于 setInterval,传入的函数也是会一直存在于内存中,直到 clearInterval 被调用。
- 另外,这里还有一个需要注意的副作用,即如果函数引用了外部变量 (闭包),那么只要这个函数还存在,这些外部变量也会随之存在。这可能会导致它们占用比函数本身更多的内存。因此,当我们不再需要这些调度函数时,最好要及时取消它们,即使这些函数的内存占用很小。
- 如果你的setInterval调用的函数存在报错,一直没有解决,就会导致内存一直增加,此时需要停止当前的setInterval
- 每次函数执行完之后将会回收非闭包的内存