递归javascript函数导致;超过最大调用堆栈大小;
在设计一个小型API的过程中,为了使我的函数尽可能灵活,我决定开始添加参数是否传递的检查,然后在此基础上,做不同的事情。因此,当使用数字调用函数时,该函数将该数字用作数组中的索引。如果没有传递任何数字,我希望函数调用自身的次数与数组长度相同。但是我得到了调用堆栈错误。我已经将问题归结为函数的递归方面,我在下面列出。对我来说最奇怪的是 这会导致错误递归javascript函数导致;超过最大调用堆栈大小;,javascript,recursion,Javascript,Recursion,在设计一个小型API的过程中,为了使我的函数尽可能灵活,我决定开始添加参数是否传递的检查,然后在此基础上,做不同的事情。因此,当使用数字调用函数时,该函数将该数字用作数组中的索引。如果没有传递任何数字,我希望函数调用自身的次数与数组长度相同。但是我得到了调用堆栈错误。我已经将问题归结为函数的递归方面,我在下面列出。对我来说最奇怪的是 这会导致错误 function testing(a){ if(!a){ for(var i = 0; i < 3; i += 1){
function testing(a){
if(!a){
for(var i = 0; i < 3; i += 1){
testing(i);
}
}else{
alert(a);
}
}
testing();
都没有用。这让我抓狂,我想知道这里发生了什么。如果
a==0
它是false
,这意味着你有一个无限循环
有关更多详细信息,请阅读并(谢谢@yochannah)这很好用
function testing(a){
if(!a || a == 0){
for(var i = 1; i <= 3; i++){
testing(i);
}
} else {
alert(a);
}
};
testing();
功能测试(a){
如果(!a | | a==0){
对于(var i=1;i),似乎在循环的第一次迭代中每次都要传递0,所以它总是要传递if(!a)
,然后启动另一个递归调用,这反过来也会做同样的事情。下面是一篇关于真实性/错误性的文章,这就是为什么在js中会发生这种情况:
testing(function(i){return i;}(i));
function testing(a){
if(!a || a == 0){
for(var i = 1; i <= 3; i++){
testing(i);
}
} else {
alert(a);
}
};
testing();