【问题标题】:JavaScript variable memory allocationJavaScript 变量内存分配
【发布时间】:2021-09-11 14:58:00
【问题描述】:

在声明和初始化方面,JavaScript 中的变量在哪个阶段分配了内存?

console.log(a); // Prints undefined
var a;
a = 20;

对于上面的 sn-p,a = undefined 甚至在代码执行开始之前。这是否意味着在创建变量环境期间分配了没有值(未定义)的内存?如果是,在代码执行阶段,当 JavaScript 引擎遇到a = 20 时,是否会将新的内存块分配给 20 个点?

【问题讨论】:

  • 您应该更清楚地区分添加到环境中的变量以及可从 javascript 读取的变量(可见效果,对您来说很有趣),以及分配的实际内存,其中将包含实际位(实现细节,通常与您不太相关)。实际位的内存可能是预先分配和池化的,比任何正在执行的代码要早得多。
  • 这是一个实现细节,据我了解,任何一种实现都可以用不同的方式处理这个问题。

标签: javascript memory-management


【解决方案1】:

这叫吊装。

来自MDN Web Docs documentation on hoisting:

解释器在执行代码之前为变量和函数声明分配内存

把它想象成你所有的变量,在未来声明为var,首先被读取并设置为undefined。稍后对变量值的更改将分配给同一个变量。

console.log(a); // undefined

var a;

a = 20;

console.log(a); // 20

请注意,您只能使用 var 来执行此操作——let 和 const 在它们的声明点是只读的。

console.log(b); // ReferenceError: b is not defined


console.log(c); // ReferenceError: c is not defined
let c = 1;


console.log(d); // ReferenceError: d is not defined
const d = 1;

【讨论】:

  • 你的解释不正确,在解释之前,及时编译器是由JIT完成的。这会在创建阶段为变量和函数声明分配内存@Aziza Kasenova
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多