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への参照が常に削除されるとは限りません。 (明らかにいくつかのページが壊れていますか?) –