Раз в три месяца этот вопрос тут появляется.
Определение замыкания дано в вопросе.
Относительно javascrtipt замыкание - это копирование родительской области видимости (а стало быть всех переменных в ней) в дочернюю.
А область видимости в javascript ограничивается функциями.
Наглядный пример:
var a="a"
var f1 = function () {
var b = "b";
var f1_1 = function() {
var c = "c";
// у дочерней функции f1_1 есть доступ к переменной a из глобальной области видимости
// к переменной b из области видимости функции f1
// к переменной c из локальной области видимости функции f1_1
console.log(a); // выведет a
console.log(b); // выведет b
console.log(c); // выведет c
}
// у функции f1 есть доступ к переменной a из глобальной области видимости
// к переменной b из области видимости функции f1
// переменная c, определенная в локальной области видимости функции f1_1, не видна
console.log(a); // выведет a
console.log(b); // выведет b
console.log(c); // выведет undefined
}
// в глобальной области видимости видна только переменная a
// и функция f1, которая также находится в глобальной области видимости
console.log(a); // выведет a
console.log(b); // выведет undefined
console.log(c); // выведет undefined
Для большинства повседневных задач подобного объяснения будет достаточно.