javascript中允许函数的嵌套定义,但它会使程序的可读性降低,因此,需要尽量避免使用这种定义嵌套函数的方式。
函数的嵌套调用:
函数带返回值的情况下可以赋值变量;
函数有直接输出的函数体时不可以赋值变量(因为赋值时,函数会直接输出,造成函数提前调用,变量赋值无效)
如下代码所示:
//应用函数的嵌套实现判断制定年份和月份对应天数的功能,将年份和月份作为函数的参数进行传递
function day(year,month){
if ( ((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0) )
{
switch(month){(不可以直接document.write("31天",否则调用时无法赋值给变量))
case 1: /* var t="31天"; return t;*/ return "31天";break;
case 2:return "29天";break;
case 3:return "31天";break;
case 4:return "30天";break;
case 5:return "31天";break;
case 6:return "30天";break;
case 7:return "31天";break;
case 8:return "31天";break;
case 9:return "30天";break;
case 10:return "31天";break;
case 11:return "30天";break;
case 12:return "31天";break;
}}else{
switch(month){
case 1:return "31天";break;
case 2:return "28天";break;
case 3:return "31天";break;
case 4:return "30天";break;
case 5:return "31天";break;
case 6:return "30天";break;
case 7:return "31天";break;
case 8:return "31天";break;
case 9:return "30天";break;
case 10:return "31天";break;
case 11:return "30天";break;
case 12:return "31天";break;
}
}
}
function riqi(year,month){
var x=day(year,month);
document.write(year+"年"+month+"月"+x);
alert(year+"年"+month+"月"+x);
}
riqi(2016,1);
----------------------------------------------------------------------------------------------------------------------
嵌套函数的参数可以给内部函数和调用函数共同使用
如下代码所示:
//在选手演唱完毕后,三维评委分别给出分数,将三个分数的平均分作为该选手的最后的得分。周星星在演唱完毕后,
//三维评委/给出的分数分别为91,89,93,
//通过函数的嵌套调用获取周星星的最后的得分;function getAverage(score1,score2,score3)
{
var average=(score1+score2+score3)/3;
return average;
}
function getResult(score1,score2,score3){
document.write("3个评委给出的分数分别为:"+score1+"分、"+score2+"分、"+score3+"分<br>");
var result=getAverage(score1,score2,score3);
document.write("周星星的最后得分为:"+result+"分");
}
getResult(91,89,93);// 此处一次传参数,共两个函数使用
document.write('</br>');
------------------------------------------------------------------------------------------------------
递归函数:递归函数就是在函数自身的函数体内调用自身,一般情况下,递归函数只在特定情况下才使用,比如处理阶乘问题。
语法如下:
function 方法名(参数1)
{
function 方法名(参数2);
}
例如,使用递归函数取得10!的值,其中10!=10*9!,而9!=9*8!,以此类推,最后1!=1,
这样的数学公式在javascript中即可以很容易的使用函数进行描述,也可以使用f(n)表示n!的值,
当1<n<10时,f(n)=n*f(n-1);当n<=1时,f(n)=1。
代码如下:
function f(num)//定义递归函数
{
if(num<=1){return 1;}//如果参数num的值小于或等于1,返回1
else{num*f(num-1);}//否则,调用递归函数
}
alert("10!的结果为:"+f(10));//调用函数输出10的阶乘
定义递归函数需要的两个必要条件:
★包括一个结束递归的条件。
如上面示例中的if(num<=1)语句,如果满足条件则执行return 1语句,不再递归。
★包括一个递归调用的语句。
如上面示例中的return f(num-1)*num语句,用于实现调用递归函数。