Замыкания — это просто концепция, которая происходит внутри.

В JavaScript замыкание — это функция, которая ссылается на переменные во внешней области из своей внутренней области. Замыкание сохраняет внешнюю область внутри своей внутренней области.

Рассмотрим следующий скрипт:

Если мы будем следовать нашему обычному подходу к процессу выполнения JS, мы придем к выводу, что на выходе будет сообщение об ошибке не определено. Но фактический вывод будет «Привет». Эта проблема в приведенном выше скрипте привела к закрытию для решения.

Во время выполнения приведенного выше кода, когда return sayHi; выполняется, движок JS достаточно умен, чтобы функция sayHi() использовала переменные, которые находятся за пределами ее области действия, поэтому она помещает такие переменные в отдельный блок закрытия.

Рассмотрим следующий код:

Приведенный выше вывод кода — это не то, что нам нужно, мы хотим обновлять i каждые i*1000 секунд и печатать значение. Мы можем решить эту проблему двумя способами: используя IIFEформируя замыкание, или используя let вместо вар. Решение выглядит следующим образом: