函數(shù)定義的兩種方式:
1.函數(shù)聲明,使用var聲明? var a = function() {};
等號(hào)右邊可以是匿名函數(shù),也可以是具名函數(shù),但是都不能立即執(zhí)行,必須通過(guò)變量a實(shí)例化一個(gè) 對(duì)象才可以調(diào)用:
//匿名函數(shù)
var a = function (){
???????? alert(1);
}
var b = new a(); //返回1
//具名函數(shù)
var d = function e(){
??????? alert(2);
}
//直接調(diào)用e();會(huì)報(bào)錯(cuò)
2.函數(shù)表達(dá)式;
function aa(age){
?????????? this.age = age;
?????????? this.foo = function() {
?????????????????? alert(1);
??????????? }
}
//要調(diào)用.foo()的方法或者查找屬性age,必須new實(shí)例化一個(gè)對(duì)象,直接在函數(shù)aa中不能調(diào)用或查找
var a = new aa(12);
a.foo();? //alert(1);
a.age;?? //12
關(guān)于立即調(diào)用的函數(shù)表達(dá)式(LIFE),又叫自執(zhí)行的函數(shù)表達(dá)式的方法:
(function() {})();
(function(){}());
[function(){}()];
~function(){}();
!function(){}();
-function(){}();
+function(){}();
delete function() {}();
typeof function() {}();
void function() {}();
new function() {}();
new function() {};
var f = function() {}();
1, function() {}();
1 ^ function() {}();
1 > function() {}();
//一元運(yùn)算符,他們的作用是告訴js解析器附近的匿名函數(shù)是一個(gè)表達(dá)式
3.函數(shù)必須要有函數(shù)名,即使是聰明如我的匿名函數(shù)也必須要使用var來(lái)聲明,一個(gè)沒(méi)有函數(shù)名的函數(shù)要么是一個(gè)方法,要么就是自執(zhí)行函數(shù),若一個(gè)匿名函數(shù)既不是方法,又不是立即調(diào)用函數(shù),就會(huì)報(bào)錯(cuò)啦!
4.關(guān)于一些錯(cuò)誤的處理:
(1).function(){}();
看來(lái)是想要立即調(diào)用一個(gè)匿名函數(shù)表達(dá)式,但是實(shí)際上是聲明了一個(gè)函數(shù),但是函數(shù)聲明必須要有標(biāo)識(shí)符作為函數(shù)的名稱(chēng);
var a? =function(){}();
(2)function? f(){}();
計(jì)劃是立即調(diào)用一個(gè)具名函數(shù)表達(dá)式,但是實(shí)際上是聲明了一個(gè)函數(shù)名為f的函數(shù),末尾()作為分組運(yùn)算符,必須要提供表達(dá)式作為參數(shù);