# Add a Number to Two Variables At Once

You can initialize two variables to the same value at once, kinda:

``````var foo, bar;
foo = bar = 10;``````

But there is no similarly easy mechanism to add, say, 5 to both `foo` and `bar` at the same time. Of course, it's simple enough to just do:

``````foo += 5; // foo is now 15
bar += 5; // bar is now 15``````

But that's two operations.

The trick is:

``````foo += -bar + (bar += 5);
// foo and bar are now 15``````

You will probably never need this, it's just interesting to know it's possible.

Thanks to Matheus Avellar for sending in this little mindbending trick, who also explains:

The `-bar` gets parsed and becomes the negative value of `bar`, so -10. Then, `a += 5` runs and sets `bar` to 15 (10 + 5). Finally, it sums up both values (-10 + 15) and gives you the difference between old `bar` and new `bar`, which is 15.

1. Ryan Van Etten

Or like this :)

``````foo = bar += 5
``````
• William Ott

‘foo = bar += 5’ would just set ‘foo’ equal to ‘bar + 5’.

• Kevin

@William, this is what Chris wants. He wants to initialize both variables with 10:

``````var foo, bar;
foo = bar = 10;

console.log(foo, bar); // 10, 10
``````

Then add 5 to each of them:

``````foo = bar += 5; // same thing as: bar += 5; foo = bar;
console.log(foo, bar); // 15, 15
``````

Every math operation returns its new value:

``````var hello = 10;
console.log(hello += 5); // 15
``````
• Drazen

@Kevin in the example he set both to 10 but the exercise is all about what if you have 2 different variables and you want them both to go up by 5.

``````var foo = 10; //will be 15
var bar = 20; //will be 25

foo = bar += 5 //will result in both being 25
foo += -bar + (bar += 5); //will result in foo 15 and bar 25
``````
• Joe Maffei

It’s stuff like this that supports Douglas Crockford’s idea of making JavaScript fully extensible: “With the same ease that we can define new variables, we (could) let the programmer add new operators and new statements.” http://javascript.crockford.com/tdop/tdop.html

• Nathen

Yup, that works fine, thanks for the tip. I don’t understand what William is saying by telling that it wont work.

If I saw something like that in code I’d probably spend next two hours trying to understand why.

• Joe Maffei
You say about `foo += 5; bar += 5;`:
However, `foo += -bar + (bar += 5);` is worse in that regard, since that’s FOUR operations. You could reduce it to three with `foo -= bar - (bar += 5)`, with the added advantage of making your code even more inscrutable.