浏览器';什么是javascript垃圾收集工作?

浏览器';什么是javascript垃圾收集工作?,javascript,html,browser,garbage-collection,Javascript,Html,Browser,Garbage Collection,我必须自己销毁实例吗。。。如果我不给他们分配一个变量…他们会自动消失吗 new ImageUploadView(); vs 如果javascript中没有对对象的引用,垃圾收集器将清除它 垃圾收集器的工作方式是查找无人引用的javascript对象。如果没有人引用它,那么它就不能再次使用,因此可以删除它并回收它占用的内存。另一方面,如果任何javascript实体仍有对该对象的引用,则该对象仍在“使用中”,无法删除 在第一个代码示例中: new ImageUploadView(); var

我必须自己销毁实例吗。。。如果我不给他们分配一个变量…他们会自动消失吗

new ImageUploadView();
vs


如果javascript中没有对对象的引用,垃圾收集器将清除它

垃圾收集器的工作方式是查找无人引用的javascript对象。如果没有人引用它,那么它就不能再次使用,因此可以删除它并回收它占用的内存。另一方面,如果任何javascript实体仍有对该对象的引用,则该对象仍在“使用中”,无法删除

在第一个代码示例中:

new ImageUploadView();
var Iu = ImageUploadView();
除非对象的构造函数将
this
指针存储到其他变量或对象中,或者创建一些闭包以保持对该对象的引用,否则将不存在对该新对象的引用,垃圾收集器将清理该对象

如果您选择第二个代码示例:

new ImageUploadView();
var Iu = ImageUploadView();

只要
Iu
变量存在并保持在范围内,它将包含
ImageUploadView()
函数返回的任何内容。注意,第二个示例只是执行一个函数并存储它的值。它不一定创造任何东西。如果
ImageUploadView()
仅返回
true
,则
Iu
变量将包含的内容就到此为止。

第一种方法很好。假设
ImageUploadView
的实例在其自身之后进行了适当的清理,它将由垃圾收集器进行收集。

对于大型对象,假设内置在垃圾收集器中的浏览器一旦超出范围就会进行清理并不一定是一种好的做法。你最好自己用“删除”来清除它。例如:

delete MyImageUploadView;

编辑:如果对象未被引用为属性,则最好将其设置为null。

是,它们是垃圾收集的。只要存在至少一个对对象的引用,对象就存在。因此,只要变量存在,它就会包含它所包含的值。明白了<代码>:P@ŠimeVidas-我添加了“停留在范围内”以更好地表达我想说的内容。@jfriend-不是这样。在JavaScript控制台中执行此命令:
函数Obj(){return true;};var o=新的Obj();o==真。我的控制台显示false
newsomefunction()
返回一个
对象,而不是
SomeFunction()
@gilly3的返回值-他的第二个代码示例中没有
new
。这只是一个函数调用。@jfriend00-啊,我错过了。:-)它的返回值将被垃圾收集,即。。。(不是构造器本身)。@ŠimeVidas-确实如此。我添加了两个澄清的词。@gilly3,我如何确保“ImageUploadView”正在适当地清理自身?@user847495-如果
ImageUploadView
正在做任何超出其自身范围的事情,对它的引用可能会一直存在。例如,创建全局变量、向DOM或全局对象添加属性、绑定事件(特别是在使用闭包或以其他方式传递闭包时)。