首页 > 解决方案 > 如果 let 没有被提升或者它们进入时间死区,那么为什么这个片段会抛出错误,当它可能只是使用全局引用时

问题描述

var a = 6;
{
  console.log(a)
  let a =55
  
} 

当我执行此代码段时,我收到以下错误消息:ReferenceError:在初始化之前无法访问“a”

为什么 console.log(a) 没有给出 6 作为结果。

标签: javascriptnode.jsscopehoistinglexical-scope

解决方案


嵌套块将创建一个新的块范围词法环境。

内部a变量在该范围内声明,但在初始化之前访问,因此出现错误。

内部范围let a声明覆盖了var a声明,所以它是一个不同的变量,就好像你这样写:

var a = 6;
{
  console.log(a2)
  let a2 =55
  
} 

.


推荐阅读