【发布时间】:2013-04-25 14:13:51
【问题描述】:
我发现自己对 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();
然后在不同的时间调用各种函数。
我想知道的是,在初始化时缓存元素或对象或其他任何东西,并以上述方式在应用程序的整个生命周期中引用它们,是否会对浏览器的垃圾收集器产生积极或消极的影响。
有什么不同吗?哪种方法最能鼓励垃圾收集?它们会导致泄漏吗?有没有循环引用?如果有的话在哪里?
【问题讨论】:
-
您可以根据需要引用一个对象,只要它仍在使用中。如果它们已从 DOM 中删除,您应该清除对 DOM 对象的引用。
-
@PaulGrime 谢谢保罗,我想我明白这一点。但我担心的是,如果每次我调用 this.cache.element,它是否会在原始缓存引用的顶部的函数范围内创建一个新引用,该引用不会被垃圾收集?
标签: javascript jquery