Флэнаган хорошо описал принцип работы замыканий.
Из примеров использования? Инкапсуляция.
function user(name, password, karma) {
return {
getName: function() {return name;},
setName: function(s) {return name = s;},
checkPassword: function(pwd) {return pwd === password},
getKarma: function() {return karma;},
upKarma: function(n) {return karma += n;},
downKarma: function(n) {return karma -= n;}
};
}
var usr1 = user("Вася", "pass", 1);
usr1.getName(); // => "Вася"
usr1.setName("Петя");
usr1.getName(); // => "Петя"
usr1.checkPassword("123"); // => false
usr1.checkPassword("pass"); // => true
// ...
PS.
это только пример. в ES5 инкапсулировать лучше с помощью атрибутов свойств.