导致"超出最大调用堆栈大小"的递归javascript函数

 香港君媚儿上官燕_803 发布于 2023-02-07 12:31

在设计工作中的小API并尽量使我的函数尽可能灵活的过程中,我决定开始添加是否传递参数的检查,然后基于此,做不同的事情.因此,当使用数字调用函数时,该函数将数字用作数组中的索引.如果没有传递数字,我希望函数调用自身的次数与数组的长度一样多.但是我得到了调用堆栈错误.我把问题归结为函数的递归方面,我将在下面列出.对我来说最奇怪的是......

这会导致错误

function testing(a){
    if(!a){
        for(var i = 0; i < 3; i += 1){
            testing(i);
        }
    }else{
        alert(a);
    }
}

testing();

这不会导致错误

function testing(a){
    if(!a){
        for(var i = 0; i < 3; i += 1){
            testing(5);//Just adding hard coded number instead
        }
    }else{
        alert(a);
    }
}

testing();

我试图理解为什么在调用中传递var会抛出错误.似乎如果js引擎可以在内存中保存初始函数调用以使for循环正常工作,为什么它在调用自身时不能保持对i的引用?我觉得我在这里缺少一些基本的东西.我尝试过很多涉及以下内容的重写:

testing(function(i){return i;}(i));

一切都无济于事.这让我发疯,我想了解这里发生了什么.

1 个回答
  • 如果a===0false,那意味着你有一个无限循环

    有关详细信息,请阅读这个和这个(感谢@yochannah)

    2023-02-07 12:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有