匿名函數(shù)
我們也可以通過指派一個變量名給匿名函數(shù)的方式來定義它。
Example D2
CODE: var add=function(a, b) { return a+b; } alert(add(1,2)); // 結果 3
這個代碼和前一個例子做了同樣的事情。也許語法看起來比較奇怪,但它應該更能讓你感覺到函數(shù)是一個對象,而且我們只是為這個對指派了一個名稱。可以把它看做和 var myVar=[1,2,3]一樣的語句。以這種方式聲明的函數(shù)內(nèi)容也一樣會被編譯。
當我們指派一個這樣的函數(shù)的時候,我們并不一定要求必須是匿名函數(shù)。在這里,我作了和ExampleD2一樣的事情,但我加了函數(shù)名“theAdd”,而且我可以通過調(diào)用函數(shù)名或者是那個變量來引用函數(shù)。
Example D2A
CODE: var add=function theAdd(a, b) { return a+b; } alert(add(1,2)); // 結果 3 alert(theAdd(1,2)); // 結果也是 3
使用這種方式來定義函數(shù)在面向對象編程中是很有用的,因為我們能像底下這樣使一個函數(shù)成為一個對象的屬性。
CODE: var myObject=new Object(); myObject.add=function(a,b){return a+b}; // myObject 現(xiàn)在有一個叫做“add”的屬性(或方法) // 而且我能夠象下面這樣使用它 myObject.add(1, 2);
我們也能夠通過使用運算符new來定義一個函數(shù)。這是一個最少見的定義函數(shù)的方式并且并不推薦使用這種方式除非有特殊的理由(可能的理由見下)。語法如下:
CODE: varName=new Function([param1Name, param2Name,...paramNName], functionBody);
Example D3:
CODE: var add=new Function("a", "b", "return a+b;"); alert(add(3,4)); // 結果 7
我在這里有兩個參數(shù)叫做a和b,而函數(shù)體返回a和b的和。請注意new Function(...)使用了大寫F,而不是小寫f。 這就告訴javascript,我們將要創(chuàng)建一個類型是Function的對象。 還要注意到,參數(shù)名和函數(shù)體都是作為字符串而被傳遞。我們可以隨心所欲的增加參數(shù),javascript知道函數(shù)體會是右括號前的最后一個字符串(如果沒有參數(shù),你能夠只寫函數(shù)體)。你沒必要將所有東西都寫在一行里(使用\或者使用字符串連接符+來分隔長代碼)。\標記告訴JavaScript在下一行查找字符串的其余部分。例子如下:
Example D4
CODE: var add=new Function("a", "b", "alert" + // 注意 "+" "('adding '+a+' and ' +b);\ // 和 "\"的不同用法 return a+b;"); alert(add(3,4)); // 結果 7
采用這種方式定義函數(shù)會導致函數(shù)并沒被編譯,而且它有可能會比用其它方式定義的函數(shù)要慢。至于為什么,看一下這個代碼:
Example D5
CODE:
function createMyFunction(myOperator) { return new Function("a", "b", "return a" + myOperator + "b;"); }
var add=createMyFunction("+"); // 創(chuàng)建函數(shù) "add" var subtract=createMyFunction("-"); // 創(chuàng)建函數(shù) "subtract" var multiply=createMyFunction("*"); // 創(chuàng)建函數(shù) "multiply" // test the functions alert("加的結果="+add(10,2)); // 結果是 12 alert("減的結果="+subtract(10,2)); // 結果是 8 alert("乘的結果="+multiply(10,2)); // 結果是 20 alert(add);
這個有趣的例子創(chuàng)建了三個不同的function,通過實時傳遞不同的參數(shù)來創(chuàng)建一個新Function。因為編譯器沒法知道最終代碼會是什么樣子的,所以new Function(...)的內(nèi)容不會被編譯。那這有什么好處呢?嗯,舉個例子,如果你需要用戶能夠創(chuàng)建他們自己的函數(shù)的時候這個功能也許很有用,比如在游戲里。我們也許需要允許用戶添加“行為”給一個“player”。但是,再說一次,一般情況下,我們應該避免使用這種形式,除非有一個特殊的目的。
出處:藍色理想
責任編輯:moby
上一頁 javascript的函數(shù) [1] 下一頁 javascript的函數(shù) [3]
◎進入論壇網(wǎng)頁制作、網(wǎng)站綜合版塊參加討論
|