今晚我要编写一个图片库,这让我想到了一个哲学问题
我创建了一个预加载的 Image 对象并为其设置了一个 onload 事件
... onmouseover = function() {
preloadActive = true;
imgPreload = new Image();
imgPreload.onload = function() {
preloadActive = false;
}
imgPreload.src = ...;
}
其中imgPreload
和preloadActive
是全局变量
现在假设一个新的 onmouseover()
在 onload()
执行之前触发。
运行一行代码创建一个新的图像对象,旧图像对象失去最后一个链接并转到 Erebus,等待垃圾收集器吃掉它。
问题在这里: 旧对象实例不会立即销毁。它的 onload 事件继续存在,没人知道会持续多久?您有这方面的跨浏览器经验吗?
谢谢!
PS:我不担心 IE6
PPS:如果我有一个内部带有 setInterval 超时 ID 的对象会怎样?
obj.someVar = setInterval(...)
setInterval 是否在我执行的那一刻就停止了
obj = {}
?
最佳答案
好吧,对于初学者来说,全局变量不符合垃圾回收的条件(这通常是内存泄漏问题的原因,也是避免一起使用全局变量的众多原因之一)。
话虽如此,请阅读this article埃里克·利珀特着。它很旧,但我仍然认为它很相关。
关于 `onload` 事件的 JavaScript 对象/回调生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454795/