+ Замыкания — это одна из фундаментальных концепций JavaScript, вызывающая сложности у
+ многих
+ новичков, знать и понимать которую должен каждый JS-программист. Хорошо разобравшись с замыканиями, вы сможете
+ писать более качественный, эффективный и чистый код. А это, в свою очередь, будет способствовать вашему
+ профессиональному росту.
+ Материал, перевод которого мы публикуем сегодня, посвящён рассказу о внутренних механизмах замыканий и о том,
+ как
+ они работают в JavaScript-программах.
+
+
+
Что такое замыкание?
+ Замыкание — это функция, у которой есть доступ к области видимости, сформированной
+ внешней по
+ отношению к ней функции даже после того, как эта внешняя функция завершила работу. Это значит, что в замыкании
+ могут
+ храниться переменные, объявленные во внешней функции и переданные ей аргументы. Прежде чем мы перейдём,
+ собственно,
+ к замыканиям, разберёмся с понятием «лексическое окружение».
+
+
+
Что такое лексическое окружение?
+ Понятие «лексическое окружение» или «статическое окружение» в JavaScript относится к
+ возможности доступа к переменным, функциям и объектам на основе их физического расположения в исходном коде.
+ Рассмотрим пример:
+
+
+
+ Здесь у функции inner() есть доступ к переменным, объявленным в её собственной области
+ видимости, в области видимости функции outer() и в глобальной области видимости.
+ Функция
+ outer() имеет доступ к
+ переменным, объявленным в её собственной области видимости и в глобальной области видимости.
+
+
+ Цепочка областей видимости вышеприведённого кода будет выглядеть так:
+
+
+
+ Обратите внимание на то, что функция inner() окружена лексическим окружением функции
+ outer(), которая, в свою
+ очередь, окружена глобальной областью видимости. Именно поэтому функция inner() может
+ получить доступ к переменным,
+ объявленным в функции outer() и в глобальной области видимости.
+
+
+