在JavaScript中使用var声明变量而不进行赋值会消耗内存吗?

在JavaScript中使用var声明变量而不进行赋值会消耗内存吗?,javascript,Javascript,在对象实例中,我喜欢使用闭包机制来模拟私有成员变量。对于可能创建的大量对象,我不需要一些私有成员,但我必须声明它们,以便在闭包中使用,如“1”、“2”和“3”: (不要介意,这实际上不是我的设置的一个工作示例,它只是演示了用M在三个变量上使用闭包。) var语句本身是否已经占用了内存,或者这取决于是否实际为这些var分配了一些内容,如“one”?当声明变量时,会为其保留一个内存空间,并允许您使用为3个变量选择的名称来存储或检索该内存。这样的空间是空的,直到您用一个值填充它(two/tree将保持

在对象实例中,我喜欢使用闭包机制来模拟私有成员变量。对于可能创建的大量对象,我不需要一些私有成员,但我必须声明它们,以便在闭包中使用,如“1”、“2”和“3”:

(不要介意,这实际上不是我的设置的一个工作示例,它只是演示了用M在三个变量上使用闭包。)


var语句本身是否已经占用了内存,或者这取决于是否实际为这些var分配了一些内容,如“one”?

当声明变量时,会为其保留一个内存空间,并允许您使用为3个变量选择的名称来存储或检索该内存。这样的空间是空的,直到您用一个值填充它(two/tree将保持空)。这是通过分配操作执行的。赋值操作给变量赋值。

解释器必须存储有关作用域的信息-
one=5
将更改局部变量
one
,而不是创建全局变量(例如
four=5
)。这些信息一定要花费一些内存。在将值分配给
one
之前,此内存使用情况也适用,因为在分配时必须提供信息

很难说它需要多少内存,因为每个解释器需要多少内存。我想这还不够担心


请注意,
two
/
twree
根本不使用,在本例中可能会被垃圾收集。(实际上,您也不公开
M
,因此在本例中,所有内容都可能立即被垃圾收集。)

当声明变量而不为其赋值时,仍然需要一些可用内存,否则您无法在程序中稍后引用该变量。我不认为这是一个显着的内存量正在使用,不会有什么不同

在本文中,了解JavaScript解释器解析代码或调用函数时发生的情况可能会很有趣。阅读说明书中的内容尽管您可能担心得太多(微优化也可能发生在内存消耗上),但对于那些喜欢在语言实现的遮罩下偷窥的人(比如我)来说,答案也可能非常有趣+1您确定仅仅声明它(而不分配任何内容)就已经保留了内存吗?变量是为存储代码的一段信息而保留的内存空间量。要使用这样的内存空间,必须首先让浏览器知道您需要它。为了让浏览器为您保留这样一个内存空间,并最终使用它,您必须给它一个名称。保留的内存空间将用于从应用程序接收一些值,并在代码需要时使这些值可用。此保留内存空间的内容可以定期更改或变化。@Wolfgang:是的,对于每个变量声明,将在环境记录中为每次执行创建一个绑定。此绑定必须使用一些内存。看看我在评论中发布的链接(以及以下部分)。这是相当技术性的,但可能有帮助。@FelixKling-你能提供你在这里提到的链接吗?我对JS变量是否包含内存的声明也有类似的疑问。干杯嗨,Tincan,欢迎来到stackoverflow,谢谢你的回答。关于提供的信息,其他答案比你更准确,所以我将对这三个答案投赞成票;)
    var obj=function()
    {
        var one;
        var two;
        var three;

        var M=function()
        {
            one=5;
        };
    };