有人可以详细解释Javascript引擎如何处理循环引用?浏览器甚至node.js有很大的区别吗?Javascript /垃圾回收器中的循环引用
我在说的是对象内的明确的后/后引用。例如:
var objA = {
prop: "foo",
next: null
};
var objB = {
prop: "foo",
prev: null
};
objA.next = objB;
objB.prev = objA;
我们走了。如果我们做一个console.log(objA)
我们可以看到我们创建了一个无限的链。 最大的问题是,这不好吗?未明确清理时是否会造成内存泄漏?
那么我们必须
objA.next = null;
objB.prev = null;
或将垃圾收集在这样的星座照顾我们?
http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures那该怎么办? – Sandro
@Sandro再次阅读我的答案。 :)一个理智的GC处理周期就好了。所有比IE6更新的东西都可以被认为是理智的。如果你需要支持IE6,那么你不得不担心它的循环处理中断。显然,Google的指南是在这样的假设下编写的,即必须支持这些破碎的浏览器,所以他们不得不跳过一些额外的环节。 – jalf
@Sandro在这个例子中有一些特殊的情况:DOM元素是循环引用的一部分。一般来说,你会泄漏内存,直到你关闭页面。但是,如果我记得正确,那么当您离开时,IE并不总是删除对DOM的引用。 (显然这样做打破了一些页面?) –