【发布时间】:2021-10-22 16:15:55
【问题描述】:
在这种情况下var foo;
“foo”会指向内存中包含值undefined 的某个位置吗?
undefined在javascript中是否占用内存?
undefined 是否表示没有分配给特定标签的内存地址?
【问题讨论】:
-
““foo”会指向内存中的某个地方”是什么意思?
标签: javascript frontend
在这种情况下var foo;
“foo”会指向内存中包含值undefined 的某个位置吗?
undefined在javascript中是否占用内存?
undefined 是否表示没有分配给特定标签的内存地址?
【问题讨论】:
标签: javascript frontend
您的问题分为两部分。变量本身和undefined 值的多个副本。
首先,变量可以占用内存空间。并不总是知道它们是否占用空间,因为编译器可以以一种他们可能不会这样做(甚至直接删除)的方式优化您的代码。
关于您问题的另一部分。根据规范,只有一个 undefined 值,但规范不要求实现在内存中保存 undefined 的唯一表示。因此,只要能够保证语言语义,任何实现都可以保存该值的多个副本。
编辑:另外,规范没有指定它在内存中的值表示,所以这也是一个实现细节。
【讨论】:
var foo; ,然后在稍后执行时,JS Engine 会为它设置值,就像这样foo = 2; 。所以现在,变量已经设置了两次,第一次设置为“未定义”,然后设置为数字 2。如果我们使用 const 代替。 const 不能指向内存中的新位置。所以,我们不能设置两次?我在这里错过了什么?
const。
const 永远不会初始化为 undefined 除非您明确这样做。 let 和 const 在到达各自的声明之前不会被初始化,const 总是需要一个初始化器。 const foo; 是一个错误。
您创建的任何类型的变量都会占用内存空间,无论它是使用let、const 还是var 创建的。当您这样做时,您实际上是在告诉 JS 保留内存空间,因为您将在该变量中存储值。 undefined 是 JavaScript 中的一个值,因此,是的,它确实会消耗内存。
有一些关于let 和var 之间性能的测试导致了一些关于哪个更快(see this stack post) 的讨论,并且建议const 用于您拥有不会改变的值。
【讨论】:
let 比var 快的测试" - 我在您链接的线程中没有看到任何关于此的声明。单一的基准并不能“证明”任何事情。如果您只是从帖子中删除该句子,那将是完美的答案。
您在 javascript 中声明的任何变量都将被分配到一个内存位置。如果你在声明时没有初始化变量,那么它将被Javascript分配给undefined。这意味着您声明了一个变量,但尚未分配它。
undefined 是 javascript 中的一个值。
你可以阅读here
【讨论】:
var foo; ,然后在稍后执行时,JS Engine 会为其设置值,就像这样foo = 2; 。所以现在,变量已经设置了两次,第一次设置为“未定义”,然后设置为数字 2。如果我们使用 const 代替。 const 不能指向内存中的新位置。所以,我们不能设置两次?我在这里错过了什么?
variable declarations会被移到execution之前的顶部。所以,无论是var、let还是const,所有类型的变量都是一样的。但是在使用const 时,您不能跳过为其赋值。这就是为什么你没有体验提升的原因。你可以阅读更多关于提升developer.mozilla.org/en-US/docs/Glossary/Hoisting