Замыкания
Как функция сохраняет доступ к переменным вокруг себя.
also in web development basics
Функция может использовать переменные, объявленные во внешней функции. Если внутренняя функция продолжает существовать после завершения внешней, она сохраняет доступ к этим переменным. Это и есть замыкание.
function createCounter() {
let count = 0;
return function () {
count += 1;
return count;
};
}
const countClicks = createCounter();
console.log(countClicks()); // 1
console.log(countClicks()); // 2
console.log(countClicks()); // 3После createCounter() переменная count не исчезает: возвращённая функция всё ещё обращается к ней. Она получает доступ к той же переменной, поэтому каждое следующее значение больше предыдущего.
Каждый вызов createCounter() создаёт собственную переменную:
const firstCounter = createCounter();
const secondCounter = createCounter();
firstCounter();
firstCounter();
console.log(secondCounter()); // 1secondCounter начинает с 1, потому что при его создании появилась отдельная переменная count. Такое решение удобно, когда функции нужно хранить небольшое состояние, не открывая его напрямую остальному коду.
Замыкание и this отвечают на разные вопросы: замыкание даёт функции доступ к переменным из места, где она создана; this у обычной функции зависит от способа вызова. MDN о замыканиях.