JavaScript のガベージ コレクションと、それを促進する最善の方法について、かなり混乱しています。
私が知りたいのは、特定のパターンに関連しています。パターン自体が良いアイデアか悪いアイデアかには興味がありません。ブラウザーのガベージ コレクターがどのように応答するか、つまり、参照が解放されて収集されるか、またはリークが発生するかだけに興味があります。
次のパターンを想像してください。
TEST = {
init : function(){
this.cache = {
element : $('#element')
};
},
func1 : function(){
this.cache.element.show();
},
func2 : function(){
TEST.cache.element.show();
},
func3 : function(){
var self = this;
self.cache.element.show();
},
func4 : function(){
var element = this.cache.element;
element.show();
}
func5 : function(){
this.auxfunc(this.cache.element);
}
auxfunc1 : function(el){
el.show();
}
func6 : function(){
var el = getElement();
el.show();
}
getElement : function(){
return this.cache.element;
}
}
on page loadTEST.init()
が呼び出されたとします。
その後、さまざまな時点でさまざまな関数が呼び出されます。
私が知りたいのは、上記の方法で、初期化時に要素やオブジェクトなどをキャッシュし、アプリケーションの存続期間全体でそれらを参照することが、ブラウザーのガベージ コレクターにプラスまたはマイナスの影響を与えるかどうかです。
違いはありますか?ガベージ コレクションを促進するのに最適な方法はどれですか? それらは漏れを引き起こしますか?循環参照はありますか?もしそうならどこ?