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

使用for循环与剩余参数时的求和逻辑疑问

累加逻辑的疑问

我现在完全脑子卡壳了,想不通在以下代码中为什么要执行sum = sum + numbers[i]的操作。我甚至尝试了sum = numbers[i]或者sum = sum + numbers的写法,但始终无法理解其中逻辑,希望能得到帮助。

const add = function (...numbers) {
  let sum = 0;
  for (let i = 0; i < numbers.length; i++) sum += numbers[i];
  console.log(sum);
};

add(2, 3);
add(5, 3, 7, 2);
add(8, 2, 5, 3, 2, 1, 4);

核心逻辑拆解

sum += numbers[i](也就是你提到的sum = sum + numbers[i])是逐步累加所有输入数字的关键:

  • 初始sum = 0是累加的起点——比如计算2+3,得从0开始,先加2得到2,再加3得到最终的总和5。
  • 循环里的i是遍历数组的索引,numbers[i]代表当前循环到的那个具体输入数字。
  • 每次循环把当前数字加到之前攒下的总和上,等循环完所有数字,sum就等于所有输入数字的总和了。

你的两种尝试为什么不对

  • 写sum = numbers[i]:每次循环会直接把sum替换成当前数字,最后sum只会等于最后一个输入的数。比如调用add(2,3),第一次循环sum变成2,第二次变成3,最终输出3,根本没完成累加。
  • 写sum = sum + numbers:numbers是一个数组,数字和数组相加时,JS会把数组转成字符串拼接,比如0加[2,3]会得到"02,3",这显然不是你要的数字总和。

用具体例子走一遍流程

以add(2,3)为例:

  1. 初始化sum = 0
  2. 第一次循环(i=0):sum = 0 + numbers[0] = 0+2=2
  3. 第二次循环(i=1):sum = 2 + numbers[1] =2+3=5
  4. 循环结束,输出5,正好是2+3的结果。

换成多参数的add(5,3,7,2)也是同理:从0开始依次加5→加3→加7→加2,最终得到17,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:58:27