Замыкание - одна из важных концепций JavaScript. Это широко обсуждаемая и до сих пор запутанная концепция. Давайте разберемся, что такое закрытие.

Закрытие означает, что внутренняя функция всегда имеет доступ к переменным и параметрам своей внешней функции, даже после того, как внешняя функция вернула внутреннюю функцию. Внутренняя функция может получить доступ к переменным и параметрам внешней функции (однако не может получить доступ объект arguments внешней функции). Рассмотрим следующий пример.

Замыкание - это комбинация объединенной функции (заключенной) со ссылками на ее окружающее состояние (лексическое окружение). Другими словами, замыкание дает вам доступ к области внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз, когда создается функция, во время создания функции.

Базовый пример замыканий в JavaScript:

Замыкания имеют доступ к переменной внешней функции даже после того, как внешняя функция вернет

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

Лексический объем

Как JavaScript понимает, что passed внутри add() функции соответствует параметру passed из add()?

Это связано с тем, что JavaScript реализует механизм области видимости под названием лексическая область видимости (или статическая область видимости). Лексическая область видимости означает, что доступность переменных определяется положением переменных в исходном коде внутри областей вложенности.

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

Замыкания хранят ссылки на переменные внешней функции.

Они не хранят фактическую стоимость.

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

Удачного кодирования !!!