变量提升
使用var声明的变量会被提升到当前作用域的顶部,但是不会赋值,这时的变量为undefined
function fun(){
console.log(a);
var a = 10;
}
fun(); //undefined
相当于
function fun(){
var a;
console.log(a);
a = 10;
}
fun(); //.undefined
函数提升
函数声明式
使用函数声明式声明的函数,会被提升到当前作用域的顶部,且提升的是整体
console.log(fun); //fun(){}
function fun(){
}
相当于
function fun(){
}
console.log(fun);
函数表达式
使用函数表达式声明的函数,会将函数名提升到作用的顶部
console.log(fun); //undefined
var fun = function(){}
相当于
var fun;
console.log(fun);
fun = function(){}
变量提升和函数提升的优先级
函数提升的优先级高于变量提升的优先级
console.log(a) //a(){}
var a = 10;
function a(){
}