首页 > 解决方案 > let 和 const 变量在我们到达块之前或当我们到达块时被提升吗?

问题描述

我的问题是当我在这样的块内声明一个 let 或 const 类型的变量时

//does JS setup a memory space for let a when we are here ?
{
 //or when we are inside the block JS setup the memory space for let a ?
  let a = 5; 
}

只有当我们到达块时(在执行时)它才会被提升还是会在开始时被提升?

因为当我在块外调用它时,错误与块内的错误不同

console.log(a); ---> "Uncaught ReferenceError: a is not defined"
{
 console.log(a); -----> "Uncaught ReferenceError: Cannot access 'a' before initialization"
 let a = 5;
}

块外的错误与真正不存在的变量相同

同样的错误

console.log(a); ---> "Uncaught ReferenceError: a is not defined"
console.log(thisVariableDoesntExists); ---> "Uncaught ReferenceError: thisVariableDoesntExists is not defined"
{
 let a = 5;
}

let a = 5所以我的问题是,当我们在块内或执行上下文开始创建阶段时,Javascript 会为变量设置内存空间吗?

因为在我看来,只有当我们进入块时,javascript才会为 let 设置一个内存空间

免责声明:如果您没有清楚地理解我的问题,请不要认为我的问题是关于为什么当我console.log(a)没有像 var 那样得到“未定义”但我得到一个错误时。那不是我的问题!

提前感谢所有帮助者:)

标签: javascript

解决方案


所以我的问题是,当我们在块内或执行上下文开始创建阶段时,Javascript 是否会为变量 let a = 5 设置内存空间?

老实说,我不知道这个问题的答案,但我想知道……这真的很重要吗?对于任何主要的 Web 应用程序,并且可能对于大多数 Javascript 应用程序时期,您甚至都不太可能需要考虑变量使用多少内存的后果。

Javascript 是一种垃圾收集语言,现代计算机功能强大,所以真正的答案是:在闭包之内或之外创建尽可能多的变量。即使只是为了代码可读性,也要制作变量,因为在实际意义上它们没有成本。


推荐阅读