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

面试题:如何实现可无限柯里化、空参调用时终止的add累加函数

任意次数累加的柯里化函数实现

你给出的示例是写死三层嵌套的固定参数柯里化实现,只能接收3个参数。要扩展为任意次数调用,核心是利用闭包存储累计值,每次非空传参时返回函数自身,空参调用时返回累计结果即可。

实现代码

function add(initVal) {
  // 闭包存储累加总和,兼容首次调用无参场景
  let total = initVal ?? 0;

  function calc(nextVal) {
    // 空参数调用时返回累计结果,终止调用链
    if (nextVal === undefined) {
      return total;
    }
    // 非空参数则累加,继续返回自身支持链式调用
    total += nextVal;
    return calc;
  }

  return calc;
}

如果需要兼容ES2020以下的运行环境,可以把initVal ?? 0替换为initVal === undefined ? 0 : initVal。

测试示例

  • add(1)(2)(3)() → 返回 6
  • add(10)(20)(30)(40)() → 返回 100
  • add(5)() → 返回 5
  • add()() → 返回 0

实现原理

  • 首次调用add时初始化闭包变量total存储初始值,返回内部计算函数calc
  • 每次调用calc时如果传入参数,就将参数值累加到total,再返回calc本身,支持无限链式调用
  • 当调用calc没有传参时,直接返回累计的total值,结束整个调用流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:04