Вам нужно проверить, сколько аргументов было передано. Если два переданы, вернуть добавленные значения; в противном случае возвращает функцию, которая при вызове возвращает свой аргумент плюс аргумент замыкания:
const sum = (...args) => {
if (args.length === 2) {
return args[0] + args[1];
}
return arg => arg + args[0];
};
console.log(sum(2)(3));
console.log(sum(2, 3));
В общем, вы можете создать функцию makeSum
для обработки, когда общее число аргументов для принятия является произвольным числом:
const makeSum = totalArgCount => {
const fn = (...args) => {
if (args.length === totalArgCount) {
return args.reduce((a, b) => a + b, 0);
}
return fn.bind(undefined, ...args);
};
return fn;
};
const sum2 = makeSum(2);
console.log(sum2(2)(3));
console.log(sum2(2, 3));
const sum4 = makeSum(4);
console.log(sum4(2)(3)(4)(5));
console.log(sum4(2, 3, 4)(5));