You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的求和函数触发"maximum call stack size exceeded"错误,如何修复?

修复"maximum call stack size exceeded"错误的方法

嘿,我来帮你搞定这个问题!你遇到的这个错误是调用栈溢出,说白了就是函数自己无限调用自己,停不下来,把引擎的调用栈给撑爆啦。咱们先拆解下你代码里的问题:

先看看你写的代码片段:

var add = function(num1, num2, num3, num4, num5) { 
  for(i = 0; i < add.length; i++) { 
    if(i === 0) { 
      var first = add(i); 
    } else if(i ...

问题出在哪?

  • 第一个致命问题:你在循环里写了add(i),这相当于让add函数自己调用自己,但你完全没有设置停止递归的条件,它会一直调用下去,直到触发栈溢出错误。
  • 第二个逻辑错误:add.length指的是这个函数定义时声明的参数个数(也就是5),而不是你传入的参数值的集合。你想用循环遍历求和,但找错了对象~

修复方案

如果你只是想实现对传入的这5个参数求和,咱们可以改成这样:

var add = function(num1, num2, num3, num4, num5) {
  // 先把所有参数放进数组,方便遍历累加
  const numbers = [num1, num2, num3, num4, num5];
  let total = 0;
  // 遍历数组,把有效数字加起来
  for(let i = 0; i < numbers.length; i++) {
    // 加个判断,避免非数字参数导致结果变成NaN
    if(typeof numbers[i] === 'number' && !isNaN(numbers[i])) {
      total += numbers[i];
    }
  }
  return total;
};

// 测试一下
console.log(add(1, 2, 3, 4, 5)); // 输出15

要是你想更灵活,不管传多少个参数都能求和,可以用ES6的rest参数,写法更简洁:

// 用rest参数接收所有传入的参数
const add = (...numbers) => {
  // 用reduce方法快速累加
  return numbers.reduce((total, num) => {
    // 同样判断是否是有效数字
    return typeof num === 'number' && !isNaN(num) ? total + num : total;
  }, 0);
};

// 随便传多少参数都能用
console.log(add(10, 20)); // 30
console.log(add(1, 2, 3, 4, 5, 6)); // 21

关键提醒

  • 绝对不要在函数内部无终止条件地调用自身,这会直接导致无限递归,触发栈溢出。
  • 函数的length属性是它定义时的参数个数,不是传入的值的数量,别搞混啦。
  • 如果要处理不确定数量的参数,用rest参数或者ES5的arguments对象会更方便。

内容的提问来源于stack exchange,提问作者Niki45nk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:33:59