1.什么是函数声明,函数表达式
函数声明:function 函数名(){}
函数表达式:function 函数名(){}。函数名可写可不写。写出来的,就是命名函数表达式,不写的就是匿名函数表达式
例子:
function aaa(){};这就是函数声明
var a=function aaa(){};命名函数表达式
var a=function(){};匿名函数表达式
下面的都是函数表达式
(function aaa(){})
~function aaa(){}
-function aaa(){}
+function aaa(){}
!function aaa(){}
2.区别
(1)函数表达式可以直接后面加括号执行,而函数声明是不可以的。
function aaa(){alert(1);}();//函数声明不可以,结果有错误 var a=function aaa(){alert(1);}();//函数表达式可以,结果弹出1
~function aaa(){alert(1);}();//函数表达式可以,结果也弹出1
(2)函数声明可以被提前解析出来
如下面的例子:在火狐浏览器中弹出的是1,但是在IE浏览器中弹出的是2,但是函数表达式就不存在这样的问题了。所以在这种情况下要用函数表达式。
if(true){
function aaa(){
alert(1);
}
}
else{
function aaa(){
alert(2);
}
}
aaa();
利用函数表达式:
if(true){
var a = function aaa(){
alert(1);
}
}
else{
var a = function aaa(){
alert(2);
}
}
a();//用aaa();可以吗?no!
这时候弹出的都是1.
那么问题来了,为啥不可以用aaa();因为这个aaa()在外面调用的话,是找不到的,但是在内部是可以找到的。
对于函数表达式,不要用;
var a=function aaa(){
alert(1);
alert(typeof aaa);
}
aaa();
结果显示
var a = function aaa(){
alert(1);
alert(typeof aaa); //内部是可以找到的
}
a();
/*aaa(); //外面是找不到的*/
原文:http://www.cnblogs.com/GumpYan/p/5699664.html