Замыкание
Замыкание - это функция⚙️, у которой имеется доступ к внешней функции⚙️, даже после того, как работа внешней функции️ прекратилась. Замыкание нужно, чтобы обеспечить доступ внутренней функции к области видимости внешней функции️, но при этом закрыть доступ из внешнего окружения к переменным внутренней функции⚙️.
Требования для создания замыкания:
- Внешняя функция, которая вызывается в коде.
- Во внешней функции находится внутренняя функция.
- В качестве результата внешняя функция возвращает внутреннюю.
Рассмотрим создание замыкания на примере:
- В примере мы создали внешнюю функцию
getFruit
; - Внутри
getFruit
создали внутреннюю функциюshow
. - В качестве результата функция
getFruit
выдаёт функциюshow
. - Далее в коде мы присвоили результат функции
getFruit
переменнойshowFruit
. - Т.к. результат работы
getFruit
является функцией, тоshowFruit
становится не переменной , а функцией. - Результатом всей конструкции стала переменная
fruit
находящаяся внутри функцииgetFruit
, она стала замкнутой. Теперь мы можем только узнать значение этой переменной , изменить её нельзя.
Примеры
Рассмотрим больше примеров для понимания.
Счётчик
Счётчик, самый простой пример, на котором можно рассмотреть работу замыкания.
Улучшенный счётчик
В качестве результата у нас будет не одна функция⚙️, а сразу несколько.
Замыкание в цикле
Запоминаем фразу
Итого
Замыкания — одна из важнейших фундаментальных концепций JavaScript, её должен понимать каждый JS-разработчик. Понимание 💡 замыканий — это одна из ступеней пути к написанию эффективных и качественных приложений.
Проблемы?
Пишите в Telegram или ВКонтакте, а также подписывайтесь на наши новости
Вопросы
Что такое замыкание?
- Конструкция
- Функция
- Концепция
Что на чём замыкается?
- Функция на область видимости
- Переменные в функции
Что нужно сделать, чтобы получить доступ к замкнутой переменной?
- Опишу её и воспользуюсь
- Она доступна
- Переменную можно только просмотреть
Для того чтобы понять, на сколько вы усвоили этот урок, пройдите тест в мобильном приложении нашей школы по этой теме.
Ссылки
Contributors ✨
Thanks goes to these wonderful people (emoji key):
IIo3iTiv | Dmitriy Vasilev 💵 | Resoner2005 🐛 🎨 🖋 | Navernoss 🖋 🐛 🎨 |