Замыкания. Closure.

Замыкание это комбинация функции и лексического окружения, в котором функция была объявлена. Лексическое окружение, это переменные внешней области видимости, к которым функция имеет доступ.

function countFrom(n) {
return {
inc: () => ++n,
dec: () => --n,
val: () => n
};
}

c1 = countFrom(0);
c2 = countFrom(10);

c1.inc();
c2.dec();

console.log(c1.val()); // 1
console.log(c2.val()); // 9

В данном примере мы с помощью замыкания создали счетчик. При инициализации, счетчик запоминает свое лексическое окружение (значение n ) и может манипулировать им. При этом, каждый экземпляр счетчика помнит свое лексическое окружение.

Замыкания широко применяются. Они бывают полезны, для оптимизации и сокращения кода. Для реализаций функций, которым необходимо запоминать свое лексическое окружение. Для создания паттернов, реализующих механизмы, которые язык не поддерживает по умолчанию. Замыкание активно применяются в функциональном программировании.

Источник – bxnotes
Редактировать на GitHub