ES6:暂时性死区(TDZ)

let、const声明的变量、具有变量提升,但不赋值不能使用,不会预解析(TDZ);class定义之前调用会产生暂时性死区
使用let、const声明的变量,从一开始就形成了封闭作用域,在声明变量之前变量已经存在,但无法使用;只有等到let、const声明变量的那一行代码出现,才可以获取使用变量
当前作用域顶部到该变量声明位置中间的部分,都是该变量的死区;在死区中,禁止访问该变量
原理:
let/const在进入块级作用域后,会因为提升的原因先创建,但不会被初始化,直到声明语句执行的时候才被初始化;
初始化的时候如果使用let声明的变量没有赋值,则会默认赋值为undefined,而const必须在初始化的时候赋值;
所以创建到初始化之间的代码片段就形成了暂时性死区;
var在创建时就被初始化,并且赋值为undefined;
{
    console.log(myname);
    let myname= 'sdx ';
}//报错 
//在块作用域内,let声明的变量被提升,但变量只是创建被提升,初始化并没有被提升(初始化就是给变量先赋值成undefined),在初始化之前使用变量,就会形成一个暂时性死区





#笔记##个人随笔记#
全部评论
你们知道是怎么回事了吗?
点赞 回复 分享
发布于 2022-10-11 15:51 河南

相关推荐

10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务