js 中 会将下面代码拆分成两段,一段变量声明 var b (编译阶段执行),一段变量赋值 b = 1 (执行阶段执行), 编译器在编译阶段会将变量声明提升,
var b = 1
- es 5 作用域: 函数作用域,全局作用域,变量提升后易造成变量覆盖和污染
console.log(base1); // 不报错, 输入 undefined
var base1 =2
- es 6 引入 块级作用域, 除了 var 外,加入了 let, const (块级作用域变量,变量声明不会被提升, 可以避免变量被污染)
console.log(base); // 报错, base undefined
let base = 1
- 函数声明式也会被提升,变量和函数同时被提升的情况, 函数声明在变量声明前面 (函数声明 先于 变量声明)
function fun(){
console.log("函数声明式")
}
var func = function (){
console.log("函数表达式")
}