以下是函数声明和函数表达方式的表现形式:
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();//变量提升