arguments.callee

在递归时,都是在一定条件下调用函数自身

  • 但这样蹲在一个问题,当函数名称被重新赋值,递归内部就调用不到这个函数,会报错;

    function fbi(n) {
            if(n<=1) {
                return 1;
            }else {
                return n * fbi(n-1);
            }
    }
    fbi(4) //24
    

注意:
var newfbi = fbi;
fbi = null;
newfbi(4) //error;

所以如果不调用函数名,而是调用这个函数指针,就不会出错;那就是用arguments.callee

function fbi(n) {
            if(n<=1) {
                return 1;
            }else {
                return n * arguments.callee(n-1);
            }
    }
    fbi(4) //24

但是这用方法已经不建议使用,那就使用闭包
+ 我的理解就是,不是当前函数递归,而是函数内部进行递归,然后将递归的值返回;

    function fbi(n) {
        return (function fn(){
            n--;
            if(n<=1) {
                return 1;
            }else {
                return (n+1)*fn()//首先减一,所以这个地方比n要加1
            }
        })()
    }
fbi(4)//24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值