变量或函数提升的顺序可以归结为一下这个规律
函数形参声明—>函数声明---->变量声明
function fn(t){
t();
function t(){
console.log(2);
}
var t = function(){
console.log(3);
}
console.log(t)
}
fn(function(){console.log(1)}); //2 ƒ (){console.log(3);}
@1.变量声明var t提升到最顶端
@2.arguments中变量首先会覆盖var方式声明的变量(变量声明提升)
@3.函数声明覆盖相同名字的变量
相当于
function fn(t){
var t;
t = function(){console.log(1)};
t = function(){console.log(2)}
t();
t = function(){
console.log(3);
}
console.log(t)
}
fn(function(){console.log(1)}); //2 ƒ (){console.log(3);}
函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。