在 ES6 中,当使用 let 或 const 声明变量时,变量会进入"暂时性死区"(Temporal Dead Zone,简称 TDZ)。在 TDZ 中,如果访问该变量会引发 ReferenceError 错误。
这是因为在 JavaScript 引擎编译代码时,会将变量声明提升到所在作用域的顶部,但变量赋值并不会被提升,导致了暂时性死区的产生。
暂时性死区的存在是为了优化变量声明,避免变量在使用前被误用或被覆盖,提高了代码的可维护性和安全性。但是需要注意的是,使用 var 声明的变量不存在暂时性死区,会被提升到作用域的顶部,这也是 var 与 let/const 的一个重要区别。