递归函数报Maximum call stack size exceeded错误的原因求解
问题根因
- 核心错误点是
myFunc2中后自增运算符counter++的使用逻辑:counter++属于后自增,执行时会先返回变量的当前值,再对变量本身做+1运算。 - 你调用
myFunc1(counter++)时,实际传递给myFunc1的永远是自增前的原值,counter的有效值始终没有变化,导致myFunc1和myFunc2无限互相调用,最终触发Maximum call stack size exceeded调用栈溢出错误。 - 另外你预期counter等于4时停止运行,但当前
myFunc1的判断条件为counter < 5,即使自增逻辑修复,也会到counter等于5才停止,和你的预期不符。
修复方法
把counter++替换为前自增运算符++counter,或者直接传递counter + 1即可解决无限递归问题:
myFunc2 = (counter) => { // 两种写法二选一都可以 // myFunc1(++counter) myFunc1(counter + 1) }
如果要匹配“counter为4时停止”的预期,同步修改myFunc1的判断条件:
myFunc1 = (counter) => { if(counter < 4) { myFunc2(counter); } }
内容的提问来源于stack exchange,提问作者meep meep
相关产品推荐
相关产品推荐

