gpt4 book ai didi

javascript - 导致 "Maximum call stack size exceeded"的递归 javascript 函数

转载 作者:搜寻专家 更新时间:2023-11-01 05:01:07 25 4
gpt4 key购买 nike

在工作中设计一个小型 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));

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

最佳答案

如果 a===0false,这意味着你有一个无限循环

有关更多详细信息,请阅读 thisthis (感谢@yochannah)

关于javascript - 导致 "Maximum call stack size exceeded"的递归 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20859972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com