二者看着很像。浏览器
函数声明: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报错。