如何实现无需空括号的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
相关产品推荐
相关产品推荐

