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()

js nested functions
				
				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);