官术网_书友最值得收藏!

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("&nbsp;");   //輸出空格
    06        }
    07        for(var j=1; j<=i; j++){          //定義內層for循環語句
    08           document.write("*&nbsp;");  //輸出“*”和空格
    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的和。

主站蜘蛛池模板: 冀州市| 远安县| 禄劝| 洛阳市| 肃北| 当阳市| 共和县| 开封市| 连江县| 庆城县| 青阳县| 武陟县| 许昌市| 洛浦县| 多伦县| 琼中| 左权县| 大石桥市| 竹山县| 三穗县| 秦皇岛市| 偃师市| 达孜县| 泾源县| 营口市| 抚州市| 镇沅| 武陟县| 丹棱县| 阳谷县| 瑞金市| 临夏县| 务川| 霞浦县| 北京市| 望江县| 政和县| 班玛县| 彩票| 莱阳市| 元谋县|