以下是函数声明和函数表达方式的表现形式:
function fun(){
alert("函数提升");
}
var fun = function(){
alert("变量提升");
};
执行fun()的时候:
当用函数声明的时候,fun()的位置没有要求,都可以执行
当用函数表达式的时候,fun()需要放在表达式的后面,否则报错 undefiend
例子如下:
- 变量声明前调用
fun();//fun is not a function
var fun = function(){
alert("变量提升");
};
- 变量声明后调用
var fun1 = function(){
alert("变量提升");
};
fun1();//变量提升
总结:因为js引擎在解析js 时,会“函数声明提升”到当前作用域的函数声明,函数表达式需要执行到那行,再逐行解析。
- 函数声明会将函数整体提升
- 函数表达式同变量提升一样,只是将声明的变量提升了,一开始的赋值是undefiend
函数声明和函数表达式是同名函数的时候优先级:
function fun(){
alert("函数提升");
}
var fun=function(){
alert("变量提升");
}
fun();//变量提升
解析过程如下:
function fun(){
alert("函数提升");
}
var fun;
fun = function(){
alert("变量提升");
}
fun();//变量提升