Функции в JavaScript могут обращаться как к глобальным, так и к локальным переменным. Но можем ли мы объявить переменную внутри области действия функции, чтобы ее значение сохранялось во всей программе? Конечно, мы можем! Просто используйте замыкания.

Замыкания дают нам способ сделать переменную постоянной и приватной одновременно. Давайте посмотрим на несколько примеров:

Предположим, вы хотите сделать переменную постоянной. Первое, о чем вы могли подумать, это объявить эту переменную с глобальной областью видимости:

Но теперь у нас есть проблема. Эта переменная является глобальной, и любой может получить к ней доступ.

Таким образом, вы можете подумать: «объявите это внутри области действия функции, чтобы оно было доступно только для функции».:

Но теперь значение не меняется вообще…

Решение: используйте замыкания!

Теперь у нас есть приватная переменная, которая по-прежнему постоянна!

Здесь функция counter() действует как замыкание, потому что она включает в себя функцию и среду, в которой она была создана.

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