Solution: sum(1)(2)(3)(10)() = 16 Solution 1: Cache the value in the function itself. But, It will not work when the function is called multiple times at the same time. function sumAggr(num) { if (sumAggr.sum === undefined) { sumAggr.sum = 0; } if (num === undefined) { let temp = sumAggr.sum; sumAggr.sum = 0; return temp; } else { sumAggr.sum += num; return sumAggr; } } Solution 2: The optmized soltion. function sumAggr2(num1) { let sum = num1; return function closore(num2) { if (num2 === undefined) { return sum; } else { sum += num2; return closore; } } } console.log(sumAggr(1)(2)(3)(10)()); console.log(sumAggr2(1)(2)(3)(10)()); console.log(sumAggr(1)(2)(3)(10)()); console.log(sumAggr2(1)(2)(3)(10)());