-
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
if (true) { // TDZ开始 tmp = 'abc'; // ReferenceError console.log(tmp); // ReferenceError
let tmp; // TDZ结束 console.log(tmp); // undefined
tmp = 123; console.log(tmp); // 123
}
-
上面代码中,在let命令声明变量tmp之前,都属于变量tmp的“死区”。
-
在某一个变量的暂时性死区内使用这个未定义的变量,就会报错,(如果在这个变量的暂时性死区里使用别的未定义的变量,不会报错)
-
let的这个暂时性死区解决了typeof检测一个不存在的变量,提示undefin,地那是没有报错的问题
-
在没有let之前,typeof运算符是百分之百安全的,永远不会报错。现在这一点不成立了。这样的设计是为了让大家养成良好的编程习惯,变量一定要在声明之后使用,否则就报错。