变量提升
var声明的变量,function声明的函数存在变量提升
let 、const 不会变量提升
只有声明本身会被提升,而赋值操作不会被提升。
举个例子
console.log(a); // undefined
var a = 20
console.log(a); // 20
因为var声明的变量会提升,但赋值操作不会提升,所以第一次打印时只是声明了a 但没有赋值
// 就是像这样子
var a
console.log(a);
a = 20
console.log(a);
函数声明也是,相当于把整个fn提到作用域的最上面 ,但是函数表达式不行
fn('aa');//aa
function fn (name){
console.log(name)
}
下边来一起看一道题
var a = 10
function fn(){
console.log(a);
var a = 20
console.log(a);
}
fn()
console.log(a);
这个第一个打印是 undefined
第二个是 20
第三个是 10