Pavan Tiwari
Pavan Tiwari

Reputation: 3187

Can I add numbers using JavaScript Closures?

How can I create a closure function, that sums all passed arguments, like this?

Add(2)(2) //4
Add(2)(2)(3) // 7
Add(3)(2)(3)(0) // 8


function Add(number){
  return function(number1){
    return function(number2){
      return  number+number1+number2;
    }
  }
}
alert(Add(2)(2)(2));

I wanted a generalized way to achieve this.

Upvotes: 2

Views: 1576

Answers (1)

RobG
RobG

Reputation: 147453

There are duplicates here, probably with better examples, but I can't find one right now. You need to create a closure to keep track of the sum, then return the add function. Give it valueOf and toString methods so it works in other operations:

var add = (function() {
  var sum = 0;
  function add(n) {
    sum += +n || 0;
    return add;
  }
  add.valueOf = function(){
    return sum;
  }
  add.toString = valueOf;
  return add;
}());

document.write(add(1)(2)(3)(-2)); // 4

document.write('<br>' + add(2)(1) * 2); // 14

document.write('<br>' + add( -add())); // 0

Upvotes: 4

Related Questions