1.不管在当前哪个作用域,函数都优于变量的提升
2.当变量名和函数名一样时,再看变量赋值是否在函数执行前,如果先赋值了,则fn is not a function ,否则可以正常执行函数
具体实例如下:
1.
function fn(){
console.log("world")
};
fn(); //world
var fn = "hello";
//fn优先于var定义
相当于:
function fn(){
console.log("world")
};
var fn;
fn(); //world
fn = "hello";
2.
var fn = "hello";
fn(); // fn is not function
function fn(){
console.log("world")
};
相当于:
function fn(){
console.log("world")
};
var fn = "hello";
fn(); // fn is not function
首先fn优于var提升,但由于fn被重新赋值了,所以fn不再是函数
3.
function fn(a) {
console.log(a); //function a(){}
var a = 2;
function a() {};
console.log(a); //2
}
fn(3);
相当于:
function fn(a) {
function a() {};
var a;
console.log(a); //function a(){}
a = 2;
console.log(a); //2
}
fn(3);
4.
function fn(a) {
console.log(a); //function a(){}
function a() {};
console.log(a); //function a(){}
}
fn(3);