当前位置:嗨网首页>书籍在线阅读

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中的行为不应该引发任何问题。