Javascrip之匿名函数

前面讲过,定义函数的方式有两种:一种是函数声明,另一种是函数表达式。
函数声明: 
1
2
3
function functionName(arg0,arg1,arg2){
      //函数体
}
关于函数声明,一个重要的特征就是函数声明提升,意思就是在执行代码之前会先读取函数声明。这就意味着可以把函数声明放到调用它的语句之后。
函数表达式:
1
2
3
var functionName=function(arg0,arg1,arg2){
      //函数体
}   //最常用的形式
函数表达式会先创建一个匿名函数,在将这个匿名函数赋值给某一变量。

能够创建匿名函数在赋值给变量,也能把匿名函数作为其他函数的返回值返回。

1.递归

递归函数是在一个函数通过名字调用自身的情况下构成的。

下面是一个经典的递归阶乘的函数。

1
2
3
4
5
6
7
8
9
10
11
function factorial(num){ 
    if(num<=1){ 
        return 1; 
        }else{           
        return num*factorial(num-1);             
        
    
    
var anotherFactorial=factorial; 
factorial=null
alert(anotherFactorial(4));

这个是错误的。

我们可以用arguments.callee解决这个问题,arguments.callee是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归第调用。

1
2
3
4
5
6
7
8
9
10
11
function factorial(num){  
    if(num<=1){  
        return 1;  
        }else{            
        return num*arguments.callee(num-1);              
        }  
    }  
      
var anotherFactorial=factorial;  
factorial=null;  
alert(anotherFactorial(4));

但是在严格模式下,脚本是不能访问arguments.callee的。我们可以使用函数表达式来达成相同的结过。

1
2
3
4
5
6
7
8
9
10
11
var factorial=(function f(num){
    if(num <=1 ){
        return 1
        }else{
        return num * f(num-1);
    }
});
  
var anotherFactorial=factorial;
factorial=null;
alert(anotherFactorial(4));




原文地址:https://www.cnblogs.com/zxj159/p/3095485.html