Hope somebody finds the time to explain little about functions in functions and scoping. I am trying to understand little more on functions and scope of variables and found a quite good tutorial, but this part I just do not get.
The task:
Create a function sum that will work like that: sum(a)(b) = a+b
and accepts any number of brackets. Examples:
sum(1)(2) == 3
sum(5)(-1)(2) == 6
The solution:
function sum(a) {
var sum = a;
function f(b){
sum += b;
return f;
}
f.toString = function() { return sum };
return f; //line 12
}
alert( sum(1)(2) ); // 3e
The Explanation:
To make sum(1)
callable as sum(1)(2)
, it must return a function.
The function can be either called or converted to a number with valueOf
.
The solution is really self-explanatory:
My interpretation:
This f
in function f(b)
returned to the scope, which is from line 02 - 12.
The f
in f.toString
, is the currently returned f
from function(b)
The next return f
returns to the scope which is outside the function sum(a)
.
Problem:
I cannot figure out, where I need to think differently, because like I described above, the function would not be called again, so where is the part of the code, that make the 'several parentheses' possible?
Moreover, did I correctly assume where the f
s are returned? Would be great if somebody would give some explanations.