ES6中,let/const是使用区块作用域;var是使用函数作用域;在let和const声明变量和常量之前访问对应的变量与常量。会抛出ReferenceError错误;但在var声明之前就访问对应的变量,则会得到undefined。
如果区块中存在let和const命令,这个区块对这些命令声明的变量就形成封闭的作用域。在声明之前使用这些变量,就会报错,这就是暂时性死区。
解释:当程序的控制流程在新的作用域进行实例化时,在此作用域中用let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定(对声明语句进行求值运算),所以不能被访问(访问就会抛出错误)。所以在这运行流程进入作用域创建变量,到变量开始被访问之间的一段时间,就称之为TDZ(暂时性死区)