我发现自己对 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;
}
}
现在想象一下页面加载TEST.init()
被调用;
然后在不同的时间调用各种函数。
我想知道的是,在初始化时缓存元素或对象或其他任何东西,并以上述方式在应用程序的整个生命周期中引用它们,是否会对浏览器的垃圾收集器产生积极或消极的影响。
有什么区别吗?哪种方法最能鼓励垃圾收集?它们会导致泄漏吗?有没有循环引用?如果是在哪里?