JavaScript高级程序设计学习7_函数表达式_递归

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

function factorial(num){
  if (num <= 1){
    return 1;
  } 
  else {
    return num * factorial(num-1);
  }
}

这是一个经典的递归阶乘函数。虽然这个函数表面看来没什么问题,但下面的代码却可能导致它出错。

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //出错!

因为需要调用factorial时已经为null,此时使用 arguments.callee 可以解决这个问题
 

function factorial(num){
  if(num<=1) return 1
  else return arguments.callee(num-1)
}

但在严格模式下,不能通过脚本访问 arguments.callee,访问这个属性会导致错误。不过,可以使用命名函数表达式来达成相同的结果。例如:

var factorial = (function f(num){
  if (num <= 1){
    return 1;
  } 
  else {
    return num * f(num-1);
  }
});

在严格模式或者非严格模式都能实现
 

猜你喜欢

转载自blog.csdn.net/kl_123456/article/details/82968963