Javascript function executed in this pattern “xyz()()” throws error?

It would only work if recursiveSum would return a function.

Right now, you try to execute the return value of recursiveSum(1) as a function. It isn’t (it’s undefined), and thus an error is thrown; you try to execute undefined(2)(3).

You could do something like this.

function currySum(x) {
  return function(y) {
    return function(z) {
      return x + y + z;


If you have a variable number of arguments and want to use this currying syntax, look at any of the questions Bergi mentioned in a comment: this one, that one, another one or here.

Alternatively, write an actual variadic function:

function sum() {
  var s = 0;
  for (let n of arguments) {
    s += n;
  return s;

// summing multiple arguments
console.log(sum(1, 2, 3, 4));
// summing all numbers in an array
console.log(sum.apply(null, [1, 2, 3, 4]));

Leave a Comment