使用`onload`事件的JavaScript对象/回调生命周期

时间:2010-12-15 20:56:31

标签: javascript garbage-collection closures

我今晚正在编写一个图像库,这引出了一个哲学问题

我创建了一个预加载的Image对象并为它设置了一个onload事件

  ...  onmouseover = function() {
        preloadActive = true;
        imgPreload = new Image();

        imgPreload.onload = function() {
            preloadActive = false;
        }

        imgPreload.src = ...;
      }

imgPreloadpreloadActive是全局变量

现在假设在onmouseover()执行之前发出新的onload()

运行一行代码创建一个新的图像对象,旧的图像对象丢失最后一个链接并转到Erebus,并等待垃圾收集器吃它。

问题出现在这里: 旧对象实例不会立即销毁。它的onload事件继续存在没人知道多久时间?你有任何跨浏览器的经历吗?

谢谢!

PS:我不担心IE6


PPS:如果我的内部有 setInterval 超时ID的对象会怎样?

obj.someVar = setInterval(...)

setInterval在我执行的那一刻停止了

obj = {}

1 个答案:

答案 0 :(得分:4)

对于初学者来说,全局变量不符合垃圾收集的条件(这通常是导致内存泄漏问题的原因,也是避免全局变量一起使用的众多原因之一。)

话虽如此,请阅读Eric Lippert撰写的this article。它已经过时了,但我仍然认为它非常重要。