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

本文探讨了递归函数在JavaScript中的实现方式,包括使用函数名自我调用、arguments.callee以及命名函数表达式的方法,并解释了在严格模式下如何避免访问arguments.callee导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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);
  }
});

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值