let config = {
alert: setInterval(() => {
console.log("Alert!");
}, 1000),
};
config = null;
一般情况下当我们将对象赋值为 null
, 那些对象会被进行 垃圾回收(garbage collected) 因为已经没有对这些对象的引用了。
但 setInterval 会有些例外,详见以下知识点:
- js创建的所有 Object 类型的对象存储于当前窗口的栈空间,其中包含定时器
- v8引擎有自动回收垃圾并释放当前窗口的栈内存的机制,但这个自动回收仅限于当变量的指针指向null时,才将变量不再使用的对象从栈空间及时回收,否则它会在窗口对象销毁时才回收。
- interval对象或timeout对象,这两种定时器对象只会随着窗口对象的销毁才从栈空间回收。无法通过更改变量的指针指向null的方式通知垃圾回收机自动回收。 如果打算在窗口对象关闭之前销毁窗口对象的栈内存中的interval对象只能通过interval的销毁函数销毁它,interval的销毁函数为clearInterval,timeout的销毁函数为clearTimeout。
- 浏览器的窗口存储于浏览器的栈空间,每打开一个浏览器窗口,浏览器就会创建一个window对象。