确保变量在 javascript 中的构造函数之后被遗忘

Ensure that variables are forgotten after constructor in javascript

本文关键字:构造函数 之后 被遗忘 变量 javascript 确保      更新时间:2023-09-26

根据我目前对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 calculation不会成为A类的成员,虽然是私有的,但只要A的实例存在,它就会一直存在,占用内存。

我的问题是,如果我的理解是正确的,我如何确保在执行结束时忘记构造函数中声明的变量,从而释放内存。

首先,

您的第一个代码块中有一个小的拼写错误:

var a = A(); //it is incorrect, you should use
var a = new A();

关于构造函数中的var,此变量对于构造函数的作用域是本地的,如果您不在某些闭包中使用它(它是使用外部作用域变量的函数),则会被销毁。

例如,在您的第一个代码中,有局部变量memberB在正常情况下应该销毁,但getMemberB函数在函数体内使用它,因此在getMemberB处于活动状态之前不能销毁它。

因此,如果没有人使用构造函数,在构造函数中创建的所有局部变量都将被销毁并释放内存。