为何函数内循环拼接仅输出'ca'而非预期的'cabc'?
为什么你的代码只输出'ca'而不是'cabc'?
核心问题出在getsum函数的return语句位置——你把return写在了for循环内部,导致函数第一次循环迭代就直接终止了。
具体原因:
当调用getsum(amd, arr)时,初始acc的值是'c':
- 循环开始,
i=0,执行acc = acc + arr[i],此时acc变成'c'+'a'='ca'; - 紧接着执行
return语句,函数立刻结束执行,后续i=1(对应arr[1]='b')和i=2(对应arr[2]='c')的循环步骤完全没机会运行。
这就是为什么最终控制台只输出'ca'。
另外还有个小问题:循环里的i没有用let/const声明,会变成全局变量,可能引发意外问题,建议补上声明。
修复方案:
把return语句移到for循环外面,让循环完成所有元素的累加后再返回结果:
let amd = 'c'; const arr = ['a', 'b', 'c']; function getsum(acc, arr) { for (let i = 0; i < arr.length; i++) { acc = acc + arr[i]; // 仅累加,不提前返回 } return acc; // 循环结束后返回最终结果 } console.log(getsum(amd, arr)); // 输出 'cabc'
如果想更简洁,也可以用JavaScript数组的reduce方法(专门用于累加类操作):
let amd = 'c'; const arr = ['a', 'b', 'c']; const result = arr.reduce((acc, item) => acc + item, amd); console.log(result); // 输出 'cabc'
内容的提问来源于stack exchange,提问作者MARCUS ANTENOR
相关产品推荐
相关产品推荐

