Javascrip之匿名函数
前面讲过,定义函数的方式有两种:一种是函数声明,另一种是函数表达式。
函数声明:  
| 1 2 3 | functionfunctionName(arg0,arg1,arg2){       //函数体 } | 
关于函数声明,一个重要的特征就是函数声明提升,意思就是在执行代码之前会先读取函数声明。这就意味着可以把函数声明放到调用它的语句之后。
函数表达式:
| 1 2 3 | varfunctionName=function(arg0,arg1,arg2){       //函数体 }   //最常用的形式 | 
能够创建匿名函数在赋值给变量,也能把匿名函数作为其他函数的返回值返回。
1.递归
递归函数是在一个函数通过名字调用自身的情况下构成的。
下面是一个经典的递归阶乘的函数。
| 1 2 3 4 5 6 7 8 9 10 11 | functionfactorial(num){      if(num<=1){          return1;          }else{                    returnnum*factorial(num-1);                      }      }     varanotherFactorial=factorial;  factorial=null;  alert(anotherFactorial(4)); | 
这个是错误的。
我们可以用arguments.callee解决这个问题,arguments.callee是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归第调用。
| 1 2 3 4 5 6 7 8 9 10 11 | functionfactorial(num){       if(num<=1){           return1;           }else{                     returnnum*arguments.callee(num-1);                       }       }        varanotherFactorial=factorial;   factorial=null;   alert(anotherFactorial(4)); | 
但是在严格模式下,脚本是不能访问arguments.callee的。我们可以使用函数表达式来达成相同的结过。
| 1 2 3 4 5 6 7 8 9 10 11 | varfactorial=(functionf(num){     if(num <=1 ){         return1         }else{         returnnum * f(num-1);     } });  varanotherFactorial=factorial; factorial=null; alert(anotherFactorial(4)); | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号