使用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)为例:
- 初始化
sum = 0 - 第一次循环(i=0):
sum = 0 + numbers[0] = 0+2=2 - 第二次循环(i=1):
sum = 2 + numbers[1] =2+3=5 - 循环结束,输出5,正好是2+3的结果。
换成多参数的add(5,3,7,2)也是同理:从0开始依次加5→加3→加7→加2,最终得到17,完全符合预期。
内容的提问来源于stack exchange,提问作者user23407787
相关产品推荐
相关产品推荐

