目錄
一、聲明與表達式的格式
1.1 聲明式的格式:
函數聲明: function 函數名(){}
例子:
function aaa(){} // 函數聲明
1.2 表達式的格式:
函數表達式: function 函數名(可寫可不寫)(){} : 分別代表:命名函數表達式,匿名函數表達式
例子:
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)}(); // 可以的
~function aaa(){alert(2)}();
2.2 函數表達式可以被提前解析出來
看下面例子:這兩個例子中,執行結果的不一樣,可以看出函數表達式是提前被解析出來的。
如果需要通過判斷來調用不同函數(函數名相同),最好使用函數表達式
if(true){
function aaa(){
alert(1);
}
}else{
function aaa(){
alert(2);
}
}
aaa(); //2
if(true){
var a = function aaa(){
alert(1);
}
}else{
var a = function aaa(){
alert(2);
}
}
a(); //1
2.3 命名函數表達式跟匿名函數表達式的區別
看例子:
var a = function aaa(){
alert(1);
alert(typeof aaa); // 內部可以找到
}
a();
aaa(); // 外部找不到