有人可以詳細解釋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的引用。 (顯然這樣做打破了一些頁面?) –