JavaScript内存管理(信息)

时间:2013-01-24 09:58:26

标签: javascript memory-management memory-leaks

我想弄清楚的是,是否总是需要无效。因为我在使用Chrome时遇到了一些问题。说我有这个代码。

function MyClass() {}

MyClass.prototype.MyFunction = function() {
    this.data = "foo";
}
var c = new MyClass();
c.MyFunction();

现在一旦调用该函数,就应该允许它是GC,但是函数的结尾应该是this.data = null。这应该是标准的。

1 个答案:

答案 0 :(得分:1)

您的代码无效。您应该首先创建一个类的实例:

var c = new MyClass();
c.MyFunction();

因为MyFunction是实例函数。

否则还有delete运算符(referenceindepth analysis),用于删除对象成员(但不是对象本身)。因此,当无法再引用它们时,对象可以被垃圾收集,所以

c = undefined;

应该说服Javascript垃圾收集此对象实例并释放它所占用的内存资源。

如果您的对象实例以这种方式实例化,则会有所不同:

c = new MyClass();
c.MyFunction();
delete c; // success

因为c这次是全局(window)的成员,因此可以从中删除。