我今晚正在编写一个图像库,这引出了一个哲学问题
我创建了一个预加载的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 = {}
答案 0 :(得分:4)
对于初学者来说,全局变量不符合垃圾收集的条件(这通常是导致内存泄漏问题的原因,也是避免全局变量一起使用的众多原因之一。)
话虽如此,请阅读Eric Lippert撰写的this article。它已经过时了,但我仍然认为它非常重要。