前端问题回答

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

ES6规定,let/const 命令会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。总之,在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。
let,const有暂时性死区,而var没有
暂时性死区变现为进入当前作用域,在变量声明之前访问变量,是无法访问到的。我们平常所说的“变量提升“其实是指将「创建」和「初始化」这2个步骤都提升了。

var存在变量提升,因为其同时提升了「创建」和「初始化」let/const不存在变量提升,实际上是因为let/const只提升了「创建」,而没有提升「初始化」。
两种报错也很好理解了:
Var:“value is not defined”是因为变量没有「创建」
Let:“Cannot access ‘value’ before initialization”是「创建」了变量,但没「初始化」。因此,所谓暂时性死区,就是不能在初始化之前使用变量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值