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

JavaScript中同一cumulativeSum累计和函数处理两数组结果不同问题咨询

问题解答

1. cumulativeSum 函数运行原理

这段代码是**闭包+立即执行函数(IIFE)**的组合写法,拆解逻辑如下:

  • 外层(sum => value => sum += value)(0)是立即执行函数,调用时传入初始值0给参数sum,执行后返回内层箭头函数value => sum += value
  • 由于闭包特性,内层函数会永久持有外层作用域中sum变量的引用,sum不会被JS垃圾回收机制销毁,每次调用内层函数时,都会直接修改同一个sum变量的值,返回累加后的结果。

2. 两次处理结果不一致的原因

你复用了同一个cumulativeSum实例处理两个数组:

  • 第一次遍历peopleInLine数组计算累计和时,闭包内的sum值已经被累加到了该数组的总和950,不再是初始的0
  • 第二次遍历changeRequired数组时,累加操作是从sum=950的基础上开始计算的,因此得到的所有结果都比预期值多了950,最终输出错误。

你可以验证下错误结果:1125 - 950 = 75、1125 - 950 =75、1150-950=100,和你预期的输出完全匹配。

3. 修复方案

需要计算多组累计和时,要分别创建独立的cumulativeSum实例,每个实例持有独立的初始值为0的sum变量:

// 计算收入累计的独立实例
const cumulativeSumProfit = (sum => value => sum += value)(0);
let cumulativeProfit = peopleInLine.map(cumulativeSumProfit);

// ...中间的changeRequired生成逻辑不变

// 计算支出累计的独立实例,sum初始值为0
const cumulativeSumOutgoings = (sum => value => sum += value)(0);
let cumulativeOutgoings = changeRequired.map(cumulativeSumOutgoings);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 21:45:10