ES6 中的 TDZ(暂时性死区)


什么是 TDZ

Temporal Dead Zone(TDZ) 是 ES6(ES2015) 中对作用域新的专用语义。

let/const 和 var 的区别

es6之前

在 ES6 之前,JS 的 scope 只有两种,全局作用域和函数作用域,

es6之后

在 ES6 种出现了块级作用域,即使用 let/const 可以定义块级作用域

两个地方的区别

  1. let/const 是使用区块作用域;var 是使用函数作用域

  2. 在 let/const 声明之前就访问对应的变量与常量,会抛出 ReferenceError 错误;但在 var 声明之前就访问对应的变量,则会得到 undefined

console.log(Vname); // => undefined;
console.log(Lname); // => ReferenceError
var Vname = 'xiaoxiao';
let Lname = 'xiaoxiao';

暂时性死区


  1. ES6 明确规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 总之,在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。这在语法上,称为 “暂时性死区”(temporal dead zone,简称 TDZ)。