クロージャ使うとIEでメモリリーク?
JavaScript "サイ本" 第5版 8.8.4.2。
IEはActiveXオブジェクト/DOMエレメントのガベージコレクションに脆弱性(? weak form)を抱えています。これらのクライアントサイドオブジェクトは参照カウントが0に達したとき解放されるわけですが、この方法は循環参照がある場合には失敗します。例えばコアJavaScriptのオブジェクトがドキュメント要素を参照し、そのドキュメント要素がコアJavaScriptオブジェクトを参照し返すようなプロパティ(イベントハンドラ等)を持っている場合です。
このような循環参照はIEのクライアントサイドでクロージャを使った場合によく起こります。クロージャを使った場合、エンクローズされた関数のコールオブジェクトはすべての引数とローカル変数を含み、クロージャと同じ寿命を持つことを忘れないでください。もしこれらの関数の引数またはローカル変数がクライアントサイドのオブジェクトを参照する場合、それはメモリリークにつながる可能性があります。
詳述することは本書の範疇を超えますので詳細はこちらをどうぞ。
ふむ。これは読んでおかないとまずそう。
Javascript: The Definitive Guide
- 作者: David Flanagan
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2006/08/01
- メディア: ペーパーバック
- クリック: 89回
- この商品を含むブログ (15件) を見る