Не совсем понимаю автора. Чтобы понять замыкание необходимо понять, что у функцией есть scope и формируется он при создании функции. Отсюда возможны замыкания:
function carryAdd(a, b){
//анонимная функция при своем создании
//знает значение a и замыкает его.
//поэтому переменная a доступна внутри :c
return function(b){
return a+b
}
}
foo = carryAdd(5);
foo(10)// 15
foo(5)//10
С помощью замыканий можно реализовать инкапсулирование переменных. Т.е когда переменная находится внутри обьекта, а доступ и изменение осуществляется с помощью геттеров\сеттеров