变量提升(hoisting),是负责解析执行代码的 JavaScript 引擎的工作方式产生的一个特性。
JS引擎在运行一份代码的时候,会按照下面的步骤进行工作:
- 首先,对代码进行预解析,并获取声明的所有变量
- 然后,将这些变量的声明语句统一放到代码的最前面
- 最后,开始一行一行运行代码
console.log(a) var a = 1 function b() { console.log(a) } b() // 1
变量的这一转换过程,就被称为变量的声明提升。
而这是不规范, 不合理的, 我们用的 let 就没有这个变量提升的问题