Что такое замыкание?
Мне кажется, самый простой пример замыкания - это счетчик. var counter = (function () {
	var current = 0;
	return function () {
		current++;
		return current;
	}
})();

console.log(counter()); // 1
console.log(counter()); // 2
В данном случае мы не имеем доступ к переменной current и функция гарантированно возвращает каждый раз уникальное значение.
Если бы это была простая функция, то переменная, содержащая состояние (current), должна была бы находиться вне функции. var current = 0;
var counter = function () {
	current++;
	return current;
}

console.log(counter()); // 1
current = 5;
console.log(counter()); // 6
А это уже нарушает принцип "черного ящика", т.к. переменной можно присвоить другое значение в любом месте.
Другими словами, это такой механизм "замораживания" объектов, попавших в лексическое окружение замыкания. Сборщик мусора не удалит замороженое лексическое окружение до тех по, пока существует/используется объект-замыкание, имеющий ссылку на лексическое окружение.