ES6 中的 TDZ(暂时性死区)
什么是 TDZ
Temporal Dead Zone(TDZ) 是 ES6(ES2015) 中对作用域新的专用语义。
let/const 和 var 的区别
es6之前
在 ES6 之前,JS 的 scope 只有两种,全局作用域和函数作用域,
es6之后
在 ES6 种出现了块级作用域,即使用 let/const 可以定义块级作用域
两个地方的区别
-
let/const 是使用区块作用域;var 是使用函数作用域
-
在 let/const 声明之前就访问对应的变量与常量,会抛出 ReferenceError 错误;但在 var 声明之前就访问对应的变量,则会得到 undefined
console.log(Vname); // => undefined;
console.log(Lname); // => ReferenceError
var Vname = 'xiaoxiao';
let Lname = 'xiaoxiao';
暂时性死区
- ES6 明确规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 总之,在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。这在语法上,称为 “暂时性死区”(temporal dead zone,简称 TDZ)。