10-临时死区
7.10 临时死区
在JavaScript中,使用 let
声明的变量只有在被显式声明之后才存在,这是个很直观的概念,临时死区(TDZ)就是针对这个概念的一种戏剧性表达。也就是说,在给定的作用域内,变量的TDZ是指该变量被声明之前的代码。
大多数情况下,这都不会引起任何混乱或问题,但有一点,TDZ会给那些在ES6之前就熟悉JavaScript的人造成困扰。
typeof
是一个很常用的运算符,它可以确定某个变量是否已被声明,并且它被认为是测试存在性的一种“安全”的方式。也就是说,在 let
诞生之前,任何位于TDZ中的标识符 x
,使用typeof来测试它的存在性始终都是安全、无误的:
if(typeof x === "undefined") {
console.log("x doesn't exist or is undefined");
} else {
// safe to refer to x....
}
这段代码如果改用 let
来声明变量,typeof就不再是一个安全的操作。下面例子会发生错误:
if(typeof x === "undefined") {
console.log("x doesn't exist or is undefined");
} else {
// 此时可以安全地引用 x....
}
let x = 5;
在ES6中,没有必要使用 typeof
来检查变量是否被定义。所以,实际使用的时候, typeof
在TDZ中的行为不应该引发任何问题。