Любая функция, которая использует переменную за пределами своего функционального блока в пределах своей лексической области видимости, является примером замыкания.

Теоретически любая внутренняя функция в JavaScript может получить доступ к переменным, определенным во внешней функции, с помощью замыканий.
В JavaScript замыкания создаются каждый раз при создании функции.

Приведенный выше код является примером простейшего замыкания. Это дает следующий вывод,

foo

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

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

Приведенный выше код является классическим и хорошо известным примером замыканий, он дает следующий вывод:

outerVariable

Обратите внимание, как мы можем получить доступ к outerVariable из innerFunction, поскольку он имеет доступ к своей лексической области видимости, т. е. область, в которой находится, была объявлена.

Замыкания обычно используются для обеспечения конфиденциальности данных внутри функционального блока и передачи общих свойств нескольким функциям в пределах лексической области.

Для более подробного описания перейдите по ссылке: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures.

— На сегодня все