变量提升定义:所有变量的声明语句都会被提升到代码头部
JS的变量提升原理: 先解析代码,获取所有被声明的变量,然后再运行。
专业说法分为预编译和执行两个阶段,
变量提升分为普通的变量提升和函数声明的提升。
函数提升是整个函数的提升,如果采用赋值语句定义函数,就是只对变量名的提升--即函数表达式,
JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的.有意思的是,这意味着变量在声明之前甚至已经可用,JavaScript的这个特性被非正式的称为声明提前.
暂时性死区:
在代码块内,使用let命令声明变量之前,该变量都是不可用的,这在语法上称为暂时性死区(TDZ)