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

标签 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 = {}

?

最佳答案

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

话虽如此,请阅读this article埃里克·利珀特着。它很旧,但我仍然认为它很相关。

关于 `onload` 事件的 JavaScript 对象/回调生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454795/

相关文章:

javascript - 将 json 中的文本分成多行以在 D3 强制布局中显示标签

java - jdk8内存调优并发标记-清除GC暂停问题

java - 如何从命令行检查正在运行的 JVM 的堆使用情况?

php - 如何序列化在属性内部有闭包的对象?

swift - 关于函数和闭包的一个小问题

javascript - JQuery - 使用 .html() 设置后获取 .html()

javascript - 引用对象的方法时如何使用 jQuery promises?

javascript - 比较两个对象数组并删除第二个对象中具有相同属性值的项目

java - JVM G1 survivor 空间容量为0

javascript - jQuery/JavaScript 在循环中分配点击事件(闭包?)