Замыкания — это просто концепция, которая происходит внутри.
В JavaScript замыкание — это функция, которая ссылается на переменные во внешней области из своей внутренней области. Замыкание сохраняет внешнюю область внутри своей внутренней области.
Рассмотрим следующий скрипт:
Если мы будем следовать нашему обычному подходу к процессу выполнения JS, мы придем к выводу, что на выходе будет сообщение об ошибке не определено. Но фактический вывод будет «Привет». Эта проблема в приведенном выше скрипте привела к закрытию для решения.
Во время выполнения приведенного выше кода, когда return sayHi; выполняется, движок JS достаточно умен, чтобы функция sayHi() использовала переменные, которые находятся за пределами ее области действия, поэтому она помещает такие переменные в отдельный блок закрытия.
Рассмотрим следующий код:
Приведенный выше вывод кода — это не то, что нам нужно, мы хотим обновлять i каждые i*1000 секунд и печатать значение. Мы можем решить эту проблему двумя способами: используя IIFEформируя замыкание, или используя let вместо вар. Решение выглядит следующим образом: