根据我目前对 JavaScript 对象模型的理解,构造函数中定义的所有变量都会成为您使用构造函数创建的对象的成员。例如:
function A() {
this.memberA = 0; //memberA is now a property of A;
var memberB = 1; //memberB is now a private member of A, it can only be accessed by functions defined in the constructor
this.getMemberB = function() {
return memberB;
}
}
var a = new A(); //object of A now exists
但是,这暴露了一个问题,至少在我看来是这样。假设我想在构造函数中进行一些操作并暂时存储它们。
function A() {
this.memberA = 0; //memberA is now a property of A;
var memberB = 1; //memberB is now a private member of A, it can only be accessed by functions defined in the constructor
this.getMemberB = function() {
return memberB;
}
var calculation = /* some complex operation that I don't want to put on a single line, like I'm doing now for simplicity*/
this.memberC = calculation;
}
根据我的理解,var 计算不会成为 A 类的成员,尽管是私有(private)的,但只要 A 的实例存在,它就会一直存在,占用内存。
我的问题是,如果我的理解是正确的,如何确保构造函数中声明的变量在执行结束时被遗忘,从而释放内存。
最佳答案
首先,您的第一个代码块中有一个小拼写错误:
var a = A(); //it is incorrect, you should use
var a = new A();
关于构造函数中的var
,此变量对于构造函数的范围来说是局部的,如果您不在某些闭包中使用它(它是使用来自外部范围的变量的函数),它将被销毁。
例如,在您的第一个代码中,有一个局部变量 memberB
在正常情况下应该被销毁,但是 getMemberB
函数在函数体内使用它,因此它不能被销毁直到 getMemberB
处于事件状态。
因此,如果没有人使用它们,在构造函数中创建的所有局部变量都将被销毁并释放内存。
关于javascript - 确保 JavaScript 中的构造函数之后忘记变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22777989/