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

如何用局部变量实现JavaScript柯里化求和函数?

改造链式调用sum函数,移除全局变量

直接上改造后的代码,完全保留你习惯的调用写法,同时把累加值封装成局部变量:

function sum(a) {
  // 局部累加变量,仅当前链式调用链可用
  let res = a;
  
  // 内部闭包函数处理后续链式调用
  function inner(b) {
    if (b !== undefined) {
      res += b;
      return inner; // 返回自身维持链式调用
    } else {
      return res; // 无参数时返回最终结果
    }
  }
  
  return inner;
}

console.log(sum(1)(2)(3)(4)(5)(6)()); // 输出 21

改造思路说明

原来的全局变量res会导致所有sum调用共享同一个值,比如你先调用sum(1)(2)()得到3,再调用sum(3)()会得到6,这明显不符合预期。

现在的写法用闭包解决了这个问题:

  • 每次调用sum(初始值)时,都会创建一个独立的局部变量res,只属于当前这条链式调用链。
  • 返回的inner函数会“记住”这个res,后续的链式调用(比如(2)、(3))都是调用inner,累加操作只会修改当前链的res,不会和其他调用冲突。
  • 调用方式和你原来的写法完全一致:初始传值启动链式调用,最后加()获取结果。

测试一下独立调用的情况,结果互不干扰:

console.log(sum(1)(2)(3)()); // 6
console.log(sum(4)(5)()); // 9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:22:35