写出健壮的js递归调用

本文深入探讨JavaScript中的递归实现方式,对比分析不同递归方法的优劣,包括使用arguments.callee属性和命名函数表达式的场景及适用性。文章强调代码健壮性的重要性,并给出避免常见错误的建议。

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

这几天参加面试,有个关于递归的问题,之前在红皮书中遇到过,看过也写过代码,但是时间长了不用就会忘记,翻书肯定没有自己记住效率高;

首先解释一下为什么这么写;

//因为函数的本质是一个对象,fun是声明在栈内存中,其中保存一个地址,系统通过地址可以在堆中找到一个Function的对象;

function fun(prop){
   if(prop < 100){
        return prop;
    }else{
        fun(prop+1)
    }
}


let method = fun;
fun = null;
method(12) //报错,fun不是一个函数;

所以为了代码的健壮不建议写这样的代码,往往报错后,一脸懵逼;

 一般在js中有两种递归的写法:

如果不是在严格模式下,这样写是可以的;

//使用arguments.callee 属性

function fun(prop){
   if(prop < 100){
        return prop;
    }else{
        arguments.callee(prop+1)  //rguments.callee === fun
    }
}

ley method  =  fun;

method(99); //不会报差

 在严格模式下.arguments.callee 不可用,

强烈建议用该写法;

//命名函数表达式
let fun = (function f(prop){
    if(prop > 100){
        return prop
    }else{
        return f(prop+1)
    }
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值