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

如何实现支持未知次数链式调用的JavaScript累加函数?

问题分析与解决

原代码报错的核心原因:

  • 传入参数b时,调用adder(a + b)但未返回该函数,导致链式调用的下一次操作拿到的是undefined,触发“不是函数”的错误
  • 无参数调用时,b为undefined,a + b会得到NaN,逻辑错误
  • 未用闭包维护持续的累加状态,每次调用adder都是独立的参数值,无法实现持续累加

正确实现如下,用闭包保存累加总和,返回的函数根据是否有参数决定继续链式调用还是返回结果并清零:

function makeAdder() {
  let total = 0;
  return function adder(num) {
    // 判断是否传入有效数字参数
    if (typeof num === 'number') {
      total += num;
      // 返回自身以支持链式调用
      return adder;
    } else {
      // 无参数时返回当前总和,同时重置累加值
      const result = total;
      total = 0;
      return result;
    }
  };
}

// 测试示例
const adder = makeAdder();
console.log(adder(2)(3)(4)() === 9); // true
console.log(adder(5)() === 5); // true,验证清零功能

也可以用更简洁的写法,利用函数自身属性维护状态:

function makeAdder() {
  function adder(num) {
    if (num !== undefined) {
      adder.total = (adder.total || 0) + num;
      return adder;
    }
    const res = adder.total || 0;
    adder.total = 0;
    return res;
  }
  return adder;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:00:58