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