JS setInterval

发布时间 2023-06-10 18:28:45作者: sqmw

用法

  • 第一个参数是传入的函数
  • 第二个参数是 间隔的以毫秒为单位的时间
  • 后面的是一系列的参数
  • handler之外的参数直接不传
setInterval((...args)=>{
    args.forEach(val=>{
        console.log(val)
    })
}, 1000,"arg0","arg1","arg2")

垃圾回收和 setInterval/setTimeout 回调

当一个函数被传入 setInterval/setTimeout 中时,会为该函数创建一个内部引用并保存在调度程序中。这种方式能够防止垃圾回收器 (GC)将其回收,即使这个函数在外部没有其他引用。

// 在调度程序调用这个函数之前,这个函数将一直存在于内存中
setTimeout(()=>{
  // 函数体
}, 100);
  • 对于 setInterval,传入的函数也是会一直存在于内存中,直到 clearInterval 被调用。
  • 另外,这里还有一个需要注意的副作用,即如果函数引用了外部变量 (闭包),那么只要这个函数还存在,这些外部变量也会随之存在。这可能会导致它们占用比函数本身更多的内存。因此,当我们不再需要这些调度函数时,最好要及时取消它们,即使这些函数的内存占用很小。
  • 如果你的setInterval调用的函数存在报错,一直没有解决,就会导致内存一直增加,此时需要停止当前的setInterval
  • 每次函数执行完之后将会回收非闭包的内存