Из вашего вопроса не совсем понятно чего вы хотите, я написал два варианта, но не уверен, что именно вы подразумевали.
Вариант 1
let prevSum = 0;
const sum = (...arr) => {
if (arr.length === 0) {
return prevSum;
}
const currentSum = arr.reduce((a, b) => {
return a + (+b || 0);
}, 0);
prevSum = currentSum;
return currentSum;
};
console.log(sum(2, 2)); // 4
console.log(sum(1, 2, 3, -4, 6, 5)); // 13
console.log(sum()); // 13
В этом варианте, если аргументы не были переданы, возвращается последняя сумма которая была возвращена.
Вариант 2
let totalSum = 0;
const sum = (...arr) => {
if (arr.length === 0) {
return totalSum;
}
const currentSum = arr.reduce((a, b) => {
return a + (+b || 0);
}, 0);
totalSum += currentSum;
return currentSum;
};
console.log(sum(2, 2)); // 4
console.log(sum(1, 2, 3, -4, 6, 5)); // 13
console.log(sum()); // 17
В этом варианте, если аргументы не были переданы, возвращается общая сумма которая получается в результате сложения переданных до этого чисел.
Но как отметил @SpaceResearcher, функция, которая суммирует, должна только суммировать и не более того, так что не рекомендую вам делать что-то подобное.
Вот более правильный подход (Я использовал замыкание):
const sum = (...arr) => {
return arr.reduce((a, b) => {
return a + (+b || 0);
}, 0);
};
const mySum = createSum();
console.log(mySum(2, 2)); // 4
console.log(mySum(1, 2, 3, -4, 6, 5)); // 13
console.log(mySum()); // 17
function createSum() {
let total = 0;
const summ = (...arr) => {
if (arr.length === 0) {
return total;
}
const currentSum = sum(...arr);
total += currentSum;
return currentSum;
}
return summ;
}