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