Closure is a nested function that has access to the variables in the outer (enclosing) function’s scope chain. It has access to variables in three scopes:
- Variable in its own scope.
- Variables in the enclosing (outer) function’s scope.
- Global variables.
var globalVariable = 'Global variable.';
function outerFunction() {
var outerFunctionVariable = 'Outer function variable.';
function innerFunction () {
var innerFunctionVariable = 'Inner function variable.';
console.log("This is " + innerFunctionVariable);
console.log("I can also access " + outerFunctionVariable);
console.log("This is a " + globalVariable);
};
innerFunction();
};
outerFunction();
Best part of closure is that the nested (inner) function can access the variables from the outer scope even after the outer function has returned.
function myFunction(x) {
var outerVariable = x;
return function() {
console.log(outerVariable);
};
};
var secondFunction = myFunction("This is outer variable");
secondFunction();



this is very good article on JavaScript Closures.