【发布时间】:2010-11-22 10:13:04
【问题描述】:
调用setTimeout后,不调用clearTimeout是否存在内存泄漏问题?
谢谢。
【问题讨论】:
-
你为什么要问?你能详细说明吗?您在使用 setTimeout 时遇到过内存泄漏吗?您的目标是哪些浏览器?
标签: javascript
调用setTimeout后,不调用clearTimeout是否存在内存泄漏问题?
谢谢。
【问题讨论】:
标签: javascript
没有。仅当您想阻止挂起的 setTimeout 发生时才需要调用 clearTimeout。 setTimeout 发生后,定时器 id 不再有效,但幸运的是,使用无效的定时器 id 调用 clearTimeout 是无害的。
如果您看到发生内存泄漏,则问题出在其他地方。
【讨论】:
setTimeout 有时会导致内存泄漏...请参阅以下文章:setTimeout memory leaks
但请注意,IEx 具有垃圾收集器的精妙之处;我认为,如果您在 Javascript 闭包中引用 DOM 变量,那么收集机制就会变得混乱,并且不会在请求结束时被丢弃:最终这会成为内存泄漏。我认为这是因为 DOM 变量和内部 JS 变量被两个不同的收集器收集,并且它们没有就不再使用的内容进行正确的交流。
我认为您可以通过将变量设置为 null 来解决此问题:
setTimeout(function(){
myFunction(parameter);
parameter = null
}, myTimeout);
这明确地设置了垃圾收集。
【讨论】: