考虑以下代码(您可以将其放入Chrome开发者控制台中进行检查):
如果我运行以下命令:
要启动计时器,我可以每秒看到“时间倒计时!” 如果我运行
计时器仍在运行。
我很好奇为什么垃圾回收不能清除计时器?可怕的是,似乎现在没有办法删除计时器 - 我是正确的吗?
我的猜测是,从技术上讲,
var obj = {
f: function () {
var myRef = this;
val = setTimeout(function () {
console.log("time down!");
myRef.f();
}, 1000);
}
};
如果我运行以下命令:
obj.f();
要启动计时器,我可以每秒看到“时间倒计时!” 如果我运行
obj = null;
计时器仍在运行。
我很好奇为什么垃圾回收不能清除计时器?可怕的是,似乎现在没有办法删除计时器 - 我是正确的吗?
我的猜测是,从技术上讲,
window
仍然持有对对象的引用,因此对象仍然留在内存中。我在另一种基于 ECMA 的语言(Actionscript)中遇到过这个问题,并构建了一个处理它的库,但我认为 Javascript 会采取不同的方法。
setTimeout
的返回值,而不是将其丢弃,以便您可以使用clearTimeout
来停止它。 - Jamie Treworgy