- JavaScript從入門到精通(微視頻精編版)
- 明日科技
- 950字
- 2020-09-01 15:02:25
4.8 定義匿名函數

視頻講解
除了使用基本的function語句之外,還可使用另外兩種方式來定義函數,即在表達式中定義函數和使用Function()構造函數來定義函數。因為在使用這兩種方式定義函數時并未指定函數名,所以也被稱為匿名函數,下面分別對這兩種方式進行介紹。
4.8.1 在表達式中定義函數
在JavaScript中提供了一種定義匿名函數的方法,就是在表達式中直接定義函數,它的語法和function語句非常相似。
語法如下:
var 變量名 = function(參數1,參數2,…) { 函數體 };
這種定義函數的方法不需要指定函數名,把定義的函數賦值給一個變量,后面的程序就可以通過這個變量來調用這個函數,這種定義函數的方法有很好的可讀性。
例如,在表達式中直接定義一個返回兩個數字和的匿名函數,代碼如下:
01 <script type="text/javascript"> 02 var sum = function(x,y){ //定義匿名函數 03 return x+y; //返回兩個參數的和 04 }; 05 alert("10+20="+sum(10,20)); //調用函數并輸出結果 06 </script>
運行結果如圖4.12所示。

圖4.12 輸出兩個數字的和
在以上代碼中定義了一個匿名函數,并把對它的引用存儲在變量sum中。該函數有兩個參數,分別為x和y。該函數的函數體為“return x+y”,即返回參數x與參數y的和。
【例4.04】編寫一個帶有一個參數的匿名函數,該參數用于指定顯示多少層星號“*”,通過傳遞的參數在頁面中輸出6層星號的金字塔形圖案。代碼如下:(實例位置:資源包\源碼\04\4.04)
01 <script type="text/javascript"> 02 var star=function(n){ //定義匿名函數 03 for(var i=1; i<=n; i++){ //定義外層for循環語句 04 for(var j=1; j<=n-i; j++){ //定義內層for循環語句 05 document.write(" "); //輸出空格 06 } 07 for(var j=1; j<=i; j++){ //定義內層for循環語句 08 document.write("* "); //輸出“*”和空格 09 } 10 document.write("<br>"); //輸出換行標記 11 } 12 } 13 star(6); //調用函數并傳遞參數 14 </script>
說明
該實例的編碼格式設置為GB2312,另外,在不同的瀏覽器下運行該實例,顯示效果會略有不同。
運行結果如圖4.13所示。

圖4.13 輸出多層星號金字塔形圖案
4.8.2 使用Function()構造函數
除了在表達式中定義函數之外,還有一種定義匿名函數的方法—使用Function()構造函數來定義函數。這種方式可以動態地創建函數。
語法如下:
var 變量名 = new Function("參數1","參數2",…"函數體");
使用Function()構造函數可以接收一個或多個參數作為函數的參數,也可以一個參數也不使用。Function()構造函數的最后一個參數為函數體的內容。
注意
Function()構造函數中的所有參數和函數體都必須是字符串類型,因此一定要用雙引號或單引號引起來。
例如,使用Function()構造函數定義一個計算兩個數字和的函數,代碼如下:
01 var sum = new Function("x","y","alert(x+y);"); //使用Function()構造函數定義函數 02 sum(10,20); //調用函數
運行結果如圖4.14所示。

圖4.14 輸出兩個數字的和
上述代碼中,sum并不是一個函數名,而是一個指向函數的變量,因此,使用Function()構造函數創建的函數也是匿名函數。在創建的這個構造函數中有兩個參數,分別為x和y。該函數的函數體為“alert(x+y)”,即輸出x與y的和。
- JSP網絡編程(學習筆記)
- Spring技術內幕:深入解析Spring架構與設計
- PaaS程序設計
- VMware vSphere 6.7虛擬化架構實戰指南
- 數據結構習題精解(C語言實現+微課視頻)
- Internet of Things with the Arduino Yún
- Building Serverless Applications with Python
- 數據結構案例教程(C/C++版)
- C和C++游戲趣味編程
- Android項目實戰:手機安全衛士開發案例解析
- 移動互聯網軟件開發實驗指導
- Azure Serverless Computing Cookbook
- OpenCV with Python By Example
- Domain-Driven Design in PHP
- OpenStack Sahara Essentials