Как работают замыкания в JavaScript?

Здравствуйте! Не могу понять, как функционируют замыкания в JavaScript. Я в курсе, что такое функции и переменные, но сам принцип замыканий остается для меня загадкой.

function создатьСчетчик() {
    let счет = 0;
    return function() {
        счет++;
        return счет;
    };
}

const счетчик = создатьСчетчик();
console.log(счетчик()); // 1
console.log(счетчик()); // 2

Вот пример кода. Почему внутренняя функция продолжает иметь доступ к переменной счет, даже когда функция создатьСчетчик завершила свою работу? Я читал множество статей, но объяснения зачастую слишком сложны. Может кто-нибудь объяснить это простым языком? Спасибо заранее!

Представь рюкзак - внутренняя функция таскает его с собой, а в нем все переменные из родительской функции. Даже когда создатьСчетчик закончила работу, переменная счет не пропадает - она в рюкзаке. Вызываешь счетчик() - он достает счет, плюсует единицу и засовывает обратно.

Замыкание работает так: функция запоминает контекст, где её создали. Когда вызываешь создатьСчетчик(), JS создаёт область видимости с переменной счет. Внутренняя функция держит ссылку на эту область — она не удаляется, пока ссылка жива. Каждый вызов создатьСчетчик() делает свою отдельную “капсулу” со счётчиком, поэтому переменная остаётся доступной.