Для чего нужны замыкания (js)?
Ну если доступным, языком, то тогда на примере.
Например, надо выводить в лог сообщение, а также номер строки и время прошедшее с момента зарузки страницы.
Если не использовать замыкание, то надо определить следующую функцию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
Примет взят отсюда
Замыкание это функция и внешние переменные, которые в нее приходят.
Переменная не приходит - замыкания нет.