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

含Rest Operator的sum函数不同传参方式为何结果不同?

问题原因解析

这两段代码运行结果不同的核心问题,出在变量myValues的定义方式和函数参数传递的逻辑上:

1. 第一段代码的正常逻辑

你直接调用sum(1, 2, 3, 4)时,函数里的...array(剩余参数语法)会把传入的所有独立参数打包成数组[1,2,3,4],之后reduce遍历数组累加,自然得到总和10。

2. 第二段代码的问题所在

  • 首先,let myValues = (1, 2, 3, 4)这里用的是逗号运算符,不是定义数组。逗号运算符的规则是:依次执行所有操作数,最终返回最后一个操作数的值。所以myValues实际的值是4,根本不是你以为的包含四个数的集合。
  • 当你调用sum(myValues)时,...array会把单个参数4打包成数组[4],reduce遍历这个只有一个元素的数组,直接返回4,这就是你看到的结果。

正确的写法

如果想用变量传递多个参数,需要先把myValues定义成数组,再用展开语法把数组元素拆成独立参数传入函数:

function sum(...array) {
  return array.reduce((total, element) => {
    return total += element;
  })
}

let myValues = [1, 2, 3, 4]; // 定义为数组
let total = sum(...myValues); // 用展开语法拆分数组元素
console.log(total); // 输出10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:27:49