
上QQ阅读APP看书,第一时间看更新
4.4 嵌套函数

视频讲解
在JavaScript中允许使用嵌套函数,嵌套函数就是在一个函数的函数体中使用了其他的函数。嵌套函数的使用包括函数的嵌套定义和函数的嵌套调用,下面分别进行介绍。
4.4.1 函数的嵌套定义
函数的嵌套定义就是在函数内部再定义其他的函数。例如,在一个函数内部嵌套定义另一个函数的代码如下:
01 function outFun(){ //定义外部函数 02 function inFun(x,y){ //定义内部函数 03 alert(x+y); //输出两个参数的和 04 } 05 inFun(1,5); //调用内部函数并传递参数 06 } 07 outFun(); //调用外部函数
运行结果如图4.8所示。

图4.8 输出两个参数的和
在上述代码中定义了一个外部函数outFun(),在该函数的内部又嵌套定义了一个函数inFun(),它的作用是输出两个参数的和,最后在外部函数中调用了内部函数。
注意
虽然在JavaScript中允许函数的嵌套定义,但它会使程序的可读性降低,因此,尽量避免使用这种定义嵌套函数的方式。
4.4.2 函数的嵌套调用
在JavaScript中,允许在一个函数的函数体中对另一个函数进行调用,这就是函数的嵌套调用。例如,在函数b()中对函数a()进行调用,代码如下:
01 function a(){ //定义函数a() 02 alert("零基础学JavaScript"); //输出字符串 03 } 04 function b(){ //定义函数b() 05 a(); //在函数b()中调用函数a() 06 } 07 b(); //调用函数b()
运行结果如图4.9所示。

图4.9 函数的嵌套调用并输出结果
【例4.03】 《我是歌王》的比赛中有3位评委,在选手演唱完毕后,3位评委分别给出分数,将3个分数的平均分作为该选手的最后得分。周星星在演唱完毕后,3位评委给出的分数分别为91分、89分、93分,通过函数的嵌套调用获取周星星的最后得分。代码如下:(实例位置:资源包\源码\04\4.03)
01 <script type="text/javascript"> 02 function getAverage(score1,score2,score3){ //定义含有3个参数的函数 03 var average=(score1+score2+score3)/3; //获取3个参数的平均值 04 return average; //返回average变量的值 05 } 06 function getResult(score1,score2,score3){ //定义含有3个参数的函数 07 //输出传递的3个参数值 08 document.write("3个评委给出的分数分别为:"+score1+"分、"+score2+"分、"+score3+"分<br>"); 09 var result=getAverage(score1,score2,score3); //调用getAverage()函数 10 document.write("周星星的最后得分为:"+result+"分"); //输出函数的返回值 11 } 12 getResult(91,89,93); //调用getResult()函数 13 </script>
运行结果如图4.10所示。

图4.10 输出选手最后得分