Nested Functions
Since a function returns a value, it can also return a function as value. So we can define a function inside another function and return it.
In the example below, we define a function called
inner(), which returns a random number,
inside a function called outer()
function outer(){
function inner(){
return Math.random();
}
return inner;
}
The same can be written in function literal notation as
var outer = function() {
var inner = function(){
return Math.random();
}
return inner;
}
The inner() function cannot be accessed
directly outside of the outer() function.
But the outer() function returns a value
which can be assigned to a variable, which can then be called as a
normal function as shown below
var inside = outer();
inside();
The inner() function can also be called by
using another set of parentheses while calling
outer() as
outer()();
Below, we illustrate the same by passing numerical arguments to both
outer() and
inner() functions and then returning their
sum
function outer(x){
function inner(y){
return x+y;
}
return inner;
}
inside(1) returns the value
2
var inside = outer(1);
inside(1);
which can also be achieved by the following call
outer(1)(1);