It is possible to pass arguments on a parent function to add these arguments on the nested one.
Can you believe this?
One calls this a closure.
Let's start with an easy example without any closure:
// test1 function fTop(a) { return a; } var fake1 = fTop(1); var fake2 = fTop(2); alert(fake1 + fake2);
And the result is...?
3 of course!
OK, it was easy.
Let's continue with this new example, a little more astonishing:
// test2 function fTop(a) { function fMiddle(b) { return a + b; } return fMiddle; } var fake1 = fTop(1)(3); var fake2 = fTop(2)(4); alert(fake1 + fake2);
I can see you hesitating and saying: "This example can not work".
Ahah!! Of course it works!
The result is: 10.
Why?!
Because the numbers 1 and 2 are the arguments of the fTop() function and the numbers 3 and 4 are the arguments of the fMiddle() function.
So the first step is the fTop() function that returns fMiddle.
This fMiddle acts as a variable that stores the variable 1.
Then the fMiddle() function is executed and the variable a is here, in memory.
So the fMiddle() function is able to return the result of a + b.
To confirm this behaviour, we will create a last example, with 3 levels:
//test3 function fTop(a) { function fMiddle(b) { function fBottom(c) { return a + b + c; } return fBottom; } return fMiddle; } var fake1 = fTop(1)(3)(5); var fake2 = fTop(2)(4)(6); alert(fake1 + fake2);
And of course it works!
The result is 21.
Of course, all these examples can be done with a different way.
Let's take the test2 sample to retype a new one:
//test2.2 function fTop(a) { function fMiddle(b) { return a + b; } return fMiddle; } var fake1 = fTop(1); var fake2 = fTop(2); alert(fake1(3) + fake2(4));
Result: 10.
Maybe a more readable way, or not, depending of your programming vision.
Anyway, a great behaviour of JavaScript
Add new comment