JavaScript从入门到精通(微视频精编版)
上QQ阅读APP看书,第一时间看更新

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的和。