如何使一个函数add工作在console.log(add(2)(3)(4)) //9不使用valueof或toStrin



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

最新更新