Замыкание — это когда функция запоминает "лексическую область видимости", даже если эта функция выполняется за пределами своей лексической области видимости.



Давайте рассмотрим практический пример:

  • 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.

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