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

如何实现无需空括号的JavaScript无限累加函数?

实现无需末尾空括号的无限累加JavaScript函数

问题的核心在于你原来的函数最后一次调用返回的是一个函数,而非最终的累加结果。要解决这个问题,我们可以利用JavaScript中函数也是对象的特性,重写函数的valueOf或toString方法,让它在被转换为原始值时返回累加的总和。

实现代码

function Sum(initialNum) {
  let total = initialNum;

  const adder = function(nextNum) {
    total += nextNum;
    return adder;
  };

  // 重写valueOf,返回当前累加总和
  adder.valueOf = function() {
    return total;
  };

  // 重写toString,兼容字符串场景的转换
  adder.toString = function() {
    return String(total);
  };

  return adder;
}

使用示例

// 直接打印结果
console.log(Sum(2)(3)(4)); // 输出: 9

// 参与数值运算
const result = Sum(1)(2)(3);
console.log(result + 5); // 输出: 11

// 作为字符串使用
console.log(`总和是:${Sum(5)(5)(5)}`); // 输出: 总和是:15

原理说明

  • 每次调用Sum或返回的adder函数时,都会把传入的数值累加到内部的total变量中,然后返回adder自身,实现链式调用。
  • 当我们尝试将这个adder函数当作原始值(数值或字符串)使用时,JavaScript引擎会自动调用它的valueOf或toString方法。我们重写这两个方法返回当前的total值,就无需额外添加空括号来触发结果返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:45:27