浏览器的javascript垃圾收集如何工作?

时间:2011-12-14 01:16:11

标签: javascript html browser garbage-collection

我必须自己销毁实例吗? ......如果我没有为它们分配一个变量......它们会自动消失吗?

new ImageUploadView();

vs

var Iu = ImageUploadView();

3 个答案:

答案 0 :(得分:3)

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

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

在您的第一个代码示例中:

new ImageUploadView();

除非对象的构造函数将this指针存储到某个其他变量或对象中,或者创建一些导致对该对象的引用的闭包,否则将不会引用此新对象及其将由垃圾收集器清理。

如果您是第二个代码示例:

var Iu = ImageUploadView();

只要Iu变量存在且保持在范围内,它将包含ImageUploadView()函数返回的任何内容。注意,第二个例子,只是执行一个函数并存储它的值。它不一定创造任何东西。如果ImageUploadView()只返回true,那么所有Iu变量都将包含。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

对于大型对象,假设垃圾收集器中内置的浏览器一旦超出范围就会清理,这不一定是个好习惯。你最好用“删除”清除它们。例如:

delete MyImageUploadView;

编辑:如果不将对象作为属性引用,则最好将该对象设置为null。