二者看着很像。瀏覽器
函數聲明:function 函數名(){}函數
函數表達式:function 函數名(可寫可不寫)(){} :命名函數表達式/匿名函數表達式io
舉幾個例子:function
function aaa(){} :函數聲明匿名函數
var a=function aaa(){} :命名函數表達式命名
var a = function(){} :匿名函數表達式;錯誤
(function aaa(){}) :表達式函數表達式
區別:
1.函數表達式能夠直接後面加括號執行,而函數聲明不行
function aaa(){alert(1);}() (錯誤)
var a=function aaa(){alert(1);}() (直接運行)
二、 函數聲明能夠被提早解析出來
if(true){function aaa(){alert(1);}}
else{ function aaa(){alert(2);}};
aaa(); 執行結果不肯定,可能 1,可能2,由於函數聲明被預解析,aaa在if以前就被解析完了
if(true){var a=function aaa(){alert(1);}}
else{ var a= function aaa(){alert(2);}};
a(); 執行結果爲1 先執行的if語句。
三、 匿名函數與命名函數的區別
var a=function aaa(){alert(1);}
a(); 全部瀏覽器都支持
aaa();非ie報錯 可是把aaa放在函數裏面 則能夠。ie會將其解析爲a()和aaa();
(function aaa(){alert(1)})
aaa() 非ie報錯。