javascript - 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 是否会为变量 let a = 5 设置内存空间?
老实说,我不知道这个问题的答案,但我想知道……这真的很重要吗?对于任何主要的 Web 应用程序,并且可能对于大多数 Javascript 应用程序时期,您甚至都不太可能需要考虑变量使用多少内存的后果。
Javascript 是一种垃圾收集语言,现代计算机功能强大,所以真正的答案是:在闭包之内或之外创建尽可能多的变量。即使只是为了代码可读性,也要制作变量,因为在实际意义上它们没有成本。
推荐阅读
- typescript - 如何使用 typescript mobx 使用静态属性
- node.js - 运行puppyteerjs的nodejs程序失败
- python - /admin/ 处的 Django SuspiciousFileOpretation
- javascript - 在动态数组中显示和样式化字符串
- ruby-on-rails - 如何转到我评论过的问题
- c++ - 以升序对 2d 数组中的数字进行排序,然后以 1d 的形式呈现
- python - 我需要使用 python 将 SQL 命令发送到 INNER JOIN 两个 TABLES
- regex - 正则表达式:)
- node.js - 打开新的集成终端VSCode Mac时如何运行安装node.js?
- python - 如何控制(减少)网格矩阵中的数字 1?