Мне кажется, самый простой пример замыкания - это счетчик.
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
А это уже нарушает принцип "черного ящика", т.к. переменной можно присвоить другое значение в любом месте.