Замыкания — очень фундаментальная концепция JavaScript. Разработчики используют их практически каждый день, сами того не замечая. Если вы где-то слышали об этой теме, но до сих пор не разобрались, то эта статья как раз для вас. Определение закрытия в соответствии с MDN следующее:

"Замыкание — это комбинация функции, объединенной (заключенной) со ссылками на окружающее ее состояние (лексическое окружение)".

Проще говоря, это дает вам доступ к области действия «внешней» функции с помощью «внутренней» функции.

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

Переменные, объявленные в глобальной области, доступны во всей программе, тогда как локальные переменные доступны только внутри их «создателей области». Здесь мы видим глобальную область видимости и две локальные области видимости, созданные двумя разными функциями. В этой программе мы видим две определенные переменные «сообщение». Один находится в глобальной области видимости, а другой — в области развлечений. Когда JavaScript определяет значение для переменной сообщения, он сначала проверяет локальную область видимости, чтобы увидеть, объявлена ​​ли переменная сообщения или нет, затем он проверяет глобальную область видимости, чтобы увидеть переменную с именем message. Если он не может найти переменную, он выдаст ошибку ссылки.

После этого краткого введения, давайте снова вернемся к замыканиям. Мы сказали, что замыкания помогут нам достичь внутренней области видимости с помощью создателя внешней области видимости. Объяснить это будет проще на примере.

Здесь переменная count определяется внутри функции makeCounter, поэтому count является локальной переменной для makeCounter. Функция увеличения счетчика здесь также является локальной функцией внутри makeCounter, которая действует как внутренняя функция, о которой мы говорили ранее. Наконец, функция makeCounter возвращает увеличение счетчика для использования вне этой функции. Мы получаем ссылку на функцию увеличения счетчика при вызове makeCounter. (переменная counter в этом случае является ссылкой для увеличенияCounter). Когда мы вызываем counter много раз, мы видим, что мы меняем значение локальной переменной за пределами создателя области действия. Поэтому происходит замыкание.

Пример закрытия с параметрами:

Вы также можете вызвать внешний следующим образом:

Это называется другой концепцией, которая называется каррирование. Может быть, мы можем обсудить это в другой статье.

Закрытие

Замыкания — неотъемлемая часть разработки на любом языке, в основном это происходит из инстинктов разработчика, но знание замыкания определенно улучшит качество вашего кода.

До встречи в других статьях…