javascript - 确保 JavaScript 中的构造函数之后忘记变量

标签 javascript class oop variables memory

根据我目前对 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/

相关文章:

javascript - 通过html传递表单参数

javascript - 使最后一行不可排序

javascript - Node.js 中的面向对象设计

javascript - 本函数中JavaScript位运算符的解释

javascript - 如何显示 HTML <div> 的副本,其大小为实际大小的 80%

PHP 路径串联

c++ - 将成员函数作为成员函数的参数传递

c++ - "show"未在此范围内声明

javascript - 如何使用原型(prototype)框架在Javascript中实现面向对象?

c# - 子父表 : where I should put the method in 2 class?