Здравствуйте! Не могу понять, как функционируют замыкания в JavaScript. Я в курсе, что такое функции и переменные, но сам принцип замыканий остается для меня загадкой.
function создатьСчетчик() {
let счет = 0;
return function() {
счет++;
return счет;
};
}
const счетчик = создатьСчетчик();
console.log(счетчик()); // 1
console.log(счетчик()); // 2
Вот пример кода. Почему внутренняя функция продолжает иметь доступ к переменной счет, даже когда функция создатьСчетчик завершила свою работу? Я читал множество статей, но объяснения зачастую слишком сложны. Может кто-нибудь объяснить это простым языком? Спасибо заранее!
Представь рюкзак - внутренняя функция таскает его с собой, а в нем все переменные из родительской функции. Даже когда создатьСчетчик закончила работу, переменная счет не пропадает - она в рюкзаке. Вызываешь счетчик() - он достает счет, плюсует единицу и засовывает обратно.
Замыкание работает так: функция запоминает контекст, где её создали. Когда вызываешь создатьСчетчик(), JS создаёт область видимости с переменной счет. Внутренняя функция держит ссылку на эту область — она не удаляется, пока ссылка жива. Каждый вызов создатьСчетчик() делает свою отдельную “капсулу” со счётчиком, поэтому переменная остаётся доступной.