js声明和表达式
1.定义
函数声明:function 函数名(){}
函数表达式: function 函数名(可写可不写的)(){} 函数名写的属于命名函数表达式,不写的属于匿名函数表达式。
function aaa(){} : 函数声明
var a = function aaa(){} : 命名函数表达式
var a = function(){} : 匿名函数表达式
var a = function aaa(){} : 命名函数表达式
var a = function(){} : 匿名函数表达式
以下都属于表达式
(function aaa(){})
~function aaa(){}
-function aaa(){}
+function aaa(){}
!function aaa(){}
~function aaa(){}
-function aaa(){}
+function aaa(){}
!function aaa(){}
2.区别
a、 函数表达式可以直接后面加括号执行,而函数声明是不可以的。
b、 函数声明可以被提前解析出来的。
function aaa(){ alert(1); }();//浏览器报错
var a = function aaa(){ alert(1); }();//1
~function aaa(){ alert(1) }(); //1
if(true){function aaa(){alert(1);}}else{function aaa(){alert(2);}}
aaa();//火狐、谷歌1;ie11以下是2,ie11是1。这是因为函数声明可以被提前解析出来的,浏览器不同解析方式不同。
if(true){var a = function aaa(){alert(1);}}else{var a = function aaa(){alert(2);}}a();//结果都是1,这种情况使用表达式
var a = function aaa(){alert(1);alert(typeof aaa); //内部是可以找到的}
a(); //1 functionaaa(); //外面是找不到的,报错
(function aaa(){ alert(1) })aaa();//报错