arguments.callee在递归函数中的用法

来源:互联网 发布:d3.v3.min.js引用 编辑:程序博客网 时间:2024/05/01 12:10

arguments.callee是一个指向正在执行的函数的指针。在递归函数中可以如此用:

function abc(num){

      if(num<=1){

          return 1;

    }else{

          retrun num*arguments.callee(num-1);  //这里arguments.callee代替了原有的函数名abc

    }

}

这种用法的好处是如果出现如下情况,不会导致错误

将函数abc赋值给一个变量:

function abc(num){

      if(num<=1){

          return 1;

    }else{

          retrun num*abc(num-1);  

    }

}

var ABC=abc;

abc=null;

alert(ABC(4));//这里会报错。因为abc已经为null,虽然abc之前已经赋值给了ABC,但在进行内部递归调用时,仍然需要用到abc(num-1),因此会报错。

 

上述方法在严格模式下不能通过脚本访问,所以可以使用命名表达式来达成相同结果

var abc=(function f(num){

    if(num<=1){

         return 1;

  }else{

     return num*f(num-1);

}

})

这种方式无论将abc赋给什么变量,即便另abc=null,函数名f仍然有效。

0 0
原创粉丝点击