# 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);
```