了解下es6中的let、const暂时性死区

关于TDZ(暂时性死区的小知识)

# es6示例代码

es6中,下面的代码执行后会报ReferenceError: a is not defined的错误

let a = 'global'
{
  console.log(a) // ReferenceError: a is not defined
  let a = 1
}

原因:

  • console.log(a) 中的 a 指的是下面的 a,而不是全局的 a
  • 执行 log 时 a 还没「初始化」,所以不能使用(也就是所谓的暂时死区)

# why

ES6标准的解释

The variables are created when their containing Lexical Environment is instantiated but may not be accessed inany way until the variable’s LexicalBinding is evaluated.

⬇️

当程序的控制流程在新的作用域(module function 或 block 作用域)进行实例化时,在此作用域中用let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。

let/const 命令会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。
在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。
语法上称为 “暂时性死区”( temporal dead zone)

# advice

所以这就促使我们养成良好的编程习惯,变量一定要先声明后使用😄😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定喵君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值