我必须自己销毁实例吗? ......如果我没有为它们分配一个变量......它们会自动消失吗?
new ImageUploadView();
vs
var Iu = ImageUploadView();
答案 0 :(得分:3)
如果javascript中没有对象的引用,垃圾收集器将清理它。
垃圾收集器的工作方式是查找没有人引用的javascript对象。如果没有人引用它,那么它就不能再次使用,因此可以将其删除并将其占用的内存回收。另一方面,如果任何javascript实体仍然具有对该对象的引用,那么它仍然处于“使用中”并且无法删除。
在您的第一个代码示例中:
new ImageUploadView();
除非对象的构造函数将this
指针存储到某个其他变量或对象中,或者创建一些导致对该对象的引用的闭包,否则将不会引用此新对象及其将由垃圾收集器清理。
如果您是第二个代码示例:
var Iu = ImageUploadView();
只要Iu
变量存在且保持在范围内,它将包含ImageUploadView()
函数返回的任何内容。注意,第二个例子,只是执行一个函数并存储它的值。它不一定创造任何东西。如果ImageUploadView()
只返回true
,那么所有Iu
变量都将包含。
答案 1 :(得分:0)
第一种方法很好。假设ImageUploadView
的实例在其自身之后进行了适当的清理,它将被垃圾收集器收集。
答案 2 :(得分:0)
对于大型对象,假设垃圾收集器中内置的浏览器一旦超出范围就会清理,这不一定是个好习惯。你最好用“删除”清除它们。例如:
delete MyImageUploadView;
编辑:如果不将对象作为属性引用,则最好将该对象设置为null。