javascript的问题添加无限的数字,没有空括号在末尾
我试过了:
const Sum = function (a) {
function innerFunc (b) {
console.log("B", b)
return b ? Sum(a + b) : a;
}
}
console.log(Sum(2)(3)(4))
但它适用于console.log(Sum(2)(3)(4)()),即最后的空括号,是否有一种方法可以通过改变函数来做到这一点,以便没有空括号的控制台日志给出正确的结果,目前它抛出一个错误,说明Sum不是一个函数
您可以实现toString
并在需要字符串的函数中使用它。
function add(...args) {
let total = 0;
function sum (...args) {
total += args.reduce((a, b) => a + b, 0);
return sum;
}
sum.toString = function () {
return total;
}
return sum(...args);
}
console.log(add(1, 2, 3)); // 6
console.log(add(1)(2)(3)); // 6
console.log(add(1, 2)(2)(3)); // 8
console.log(add(1, 6)(2, 2)(3)); // 14
console.log(add(1, 6)(2, 2)(3, 4, 5, 7)); // 30
一个更高级的版本可以使用Symbol.toPrimitive
的函数进行计算。
function add(...args) {
let total = 0;
function sum (...args) {
total += args.reduce((a, b) => a + b, 0);
return sum;
}
sum[Symbol.toPrimitive] = function (hint) {
return (['string', 'default'].includes(hint))
? total
: sum;
};
return sum(...args);
}
console.log(add(1, 2, 3)); // 6
console.log(add(1)(2)(3)); // 6
console.log(add(1, 2)(2)(3)); // 8
console.log(add(1, 6)(2, 2)(3)); // 14
console.log(add(1, 6)(2, 2)(3, 4, 5, 7)); // 30
console.log(add(1, 2)(3, 4) + 32); // 42