Ну если доступным, языком, то тогда на примере.
Например, надо выводить в лог сообщение, а также номер строки и время прошедшее с момента зарузки страницы.
Если не использовать замыкание, то надо определить следующую функцию
function log(timespan, lineNumber, msg) {
console.log(linNumber + " " + timespan + " " + msg;
}
и две переменные
var start = Date.now();
var lineNumber = 1;
Вызываем log так
log(Date.now()-start, lineNumber++, "один");
log(Date.now()-start, lineNumber++, "два");
Очевидно, что это неудобно.
Если использовать замыкание, то пишем так
var log = (function () { // функция 1
var start = Date.now(); // текущее значение сохранятся в start
var num = 1; // также используется в замыкании в функции 2.
return function (msg) { // функция 2 - сохраняется в var log
console.log(num++ + " " + (Date.now()-start) + " " + msg);
}
})(); // () -- вызываем функцию 1
Вызываем так
log("один");
log("два");
Результат
lineNumber timespan msg
------------------------------
1 0 один
2 1 два
Т.е. замыкание — это способ передачи данных в функцию.
Подробнее о замыканиях см
Mozilla Developer Network
Примет взят
отсюда