![](/img/trans.png)
[英]javascript recursive function: Uncaught RangeError: Maximum call stack size exceeded
[英]Recursive javascript function causing “Maximum call stack size exceeded”
在設計工作中的小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));
一切都無濟於事。 這讓我發瘋,我想了解這里發生了什么。
這很好用。
function testing(a){
if(!a || a == 0){
for(var i = 1; i <= 3; i++){
testing(i);
}
} else {
alert(a);
}
};
testing();
顯然,不需要從1
開始循環計數器並檢查a == 0
,但兩種方法都可以工作。
編輯:您可以擁有的另一項檢查是(a == undefined)。
問題是當你檢查它時,返回0
的變量是假的!
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.