显然,只要 DOM 元素仍然连接到 DOM,代码就可以占用额外的内存。但我猜你在问它是否会在不再使用 DOM 元素后继续使用额外的内存。
更新:感谢乔伊的回答(他已经删除了),我花了一些时间阅读javascript 中的内存泄漏,看来我在下面段落中的假设是不正确的。因为 DOM 元素不使用纯垃圾回收,所以像这样的循环引用通常会阻止 DOM 元素和 javascript 对象被释放。但是,我相信这个答案的其余部分仍然是正确的。
如果没有深入了解 javascript 引擎如何实现垃圾收集,我无法就该主题发表权威性发言。但是,我对垃圾收集的一般理解使我认为您的代码将是“安全的”,因为#something
从 DOM 中删除元素后,生成的MyClass
对象只会引用没有其他连接的对象。垃圾收集器的图形算法应该能够识别出 DOM 元素及其MyClass
对象是“漂浮在空间中的”并且与其他所有内容无关。
此外,一旦从 DOM 中删除与给定 DOM 元素相关联的数据和事件,jQuery 会不遗余力地去除它。从文档中:
jQuery 确保在通过 jQuery 方法删除 DOM 元素以及用户离开页面时删除数据。
因此,假设您始终使用 jQuery,一旦对象从 DOM 中删除,您将只有一个单向引用,这使得垃圾收集器更容易知道它可以删除这些对象。
因此,只要在MyClass
移除 DOM 元素后没有其他东西引用该对象,就不会出现内存泄漏。