1

Google JS スタイル ガイドのこのポイントを読みました: http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures

私はそれを完全には理解していません。element.onclick には機能が割り当てられていますが、すべて問題ありません。ガベージ コレクションはありませんが、まだオブジェクトを使用しているので問題ありません。

割り当てたら

element.onclick = null; 

その後、要素がそれを指していないため、閉鎖はガベージコレクションされます。問題はどこですか?

4

1 に答える 1

2

彼らが指摘しているのは、このコードでは次のとおりです。

function foo(element, a, b) {
   element.onclick = function() { /* uses a and b */ };
}

elementはクロージャへの参照を保持し、クロージャは への参照を保持しelementます。

に設定elementするとnull、何も参照していないように見えるため、通常はガベージコレクションされると予想されます。ただし、クロージャーが実際にはまだそれを参照しているため、それは起こりません。そのため、メモリ リークが発生します。

スタイル ガイドに記載されている解決策は、クロージャが への参照を保持しないようにすることelementです。

于 2014-01-28T04:56:41.480 に答える