Замыкание — это когда функция запоминает "лексическую область видимости", даже если эта функция выполняется за пределами своей лексической области видимости.
Давайте рассмотрим практический пример:
Line 10:
мы объявляем константу для возвращаемого значенияouter()
Line 1:
Наше определение дляouter()
, переходя к функции, которую мы видим наLine 2
, мы объявляем переменнуюcounter
и присваиваем ей значение0
.Line 4
: наше определениеinner()
. Переходя к функции, мы видим, что мы увеличиваемcounter
, а затем возвращаем ее.Line 9:
Мы возвращаем внутреннюю функцию 🚨 Помните, что мы буквально возвращаем полное определение функцииinner()
.
помните, что замыкание — это комбинация функции и лексического окружения, в котором эта функция была объявлена.
Давайте посмотрим на лексическое окружение для inner()
:
Подождите, если вы знаете что-нибудь о лексической области видимости или читали статью, указанную выше, вы бы знали, что inner()
не имеет переменной counter
в своем контексте выполнения, и здравый смысл лексической области видимости подскажет, что она перейдет к global scope
, чтобы проверить, живет ли она. там. Это НЕотносится к функциям, возвращаемым другими функциями!
Когда функция возвращается из другой функции, она имеет доступ к лексической области видимости, в которой была объявлена. Inner
было объявлено внутри, outer
поэтому по этому определению у него действительно есть доступ к counter
. Это простое правило, которое мы называем Closure
, обеспечивает огромную мощь не только в JavaScript, но и во многих других языках программирования.
Зачем нужны замыкания?
- Замыкания позволяют сохранять данные.
- Замыкания позволяют использовать частные переменные.
- Замыкания позволяют использовать механизм, на котором работают многие асинхронные операции.
- Закрытие определяется каждый раз, когда выполняется функция, даже глобальные функции создают замыкания.
Резюме
Мы узнали, что такое замыкания и почему они полезны. Понимание того, почему и как работают замыкания, является чрезвычайно важным навыком в программировании, поскольку позволяет использовать гораздо более функциональный подход к вашим программам. Я надеюсь, что эта короткая статья помогла вам понять, как на самом деле работают замыкания в JavaScript.
Удачного кодирования 😀 🚀