0

假设我有这样的代码

var obj = {};
obj.a = obj;

我知道现代浏览器实现了 Mark-and-sweep 算法,在这种情况下不应该有内存泄漏。但我不确定实现引用计数的旧浏览器是否将其视为循环引用。

在我看来,应该存在内存泄漏,因为引用计数为 1(由同一对象的“a”属性引用)。我是否正确引用计数为 1 或者如果对象被自身引用,浏览器不会增加引用计数?

4

1 回答 1

1

较旧的浏览器(我假设您正在谈论诸如 IE6 之类的东西)对您列出的参考没有问题,因为它完全包含在 javascript 中并且它们处理得很好。

旧浏览器存在循环引用问题的地方是 javascript 对象和 DOM 对象之间存在循环引用。如果您不将 DOM 对象存储在持久性 javascript 变量中,或者您不将对 javascript 对象的引用存储在 DOM 属性中,那么您将不会遇到此问题。在现代浏览器中也不再是问题。

于 2013-05-10T03:55:56.790 回答