Краткое введение в Closures для начинающих

Как и в случае с различными концепциями в программировании, для того, чтобы вы полностью их поняли, вам просто нужно поэкспериментировать с ними, пока «это, наконец, не щелкнет!». Я считаю, что Замыкания — одна из тех тем, с которыми многим из нас приходится бороться, хотя мы, вероятно, использовали их несколько раз, даже не осознавая этого.

Прежде чем продолжить, вот список концепций (связанных с их соответствующими определениями), с которыми я предполагаю, что вы знакомы, и если это не так, пожалуйста, прочитайте немного о них:

  • Функции первого класса: говорят, что язык программирования имеет функции первого класса, когда функции в этом языке рассматриваются как любая другая переменная.
  • Контекст выполнения: абстрактное понятие, используемое спецификацией ECMA-262 для типизации и дифференциации исполняемого кода.
  • Область: текущий контекст выполнения.
  • Лексическое окружение. Техническая терминология, используемая для описания области действия.

Итак, что такое замыкание?

Замыкание — это комбинация функции и лексического окружения, в котором эта функция была объявлена. Веб-документы MDN: замыкания

Как говорится в цитате и простыми словами, замыкание — это функция программирования, которая дает вам доступ к внешним переменным из вложенной функции, И она существует только при вызове родительской функции.

Для этого требуется как минимум внешняя функция, локальная переменная и невыполненная внутренняя функция. И я говорю «это требует как минимум», в основном потому, что это может быть намного сложнее, но концепция строго остается той же.

Вот пример того, что я только что упомянул:

Наша функция outerFunc возвращает вторую функцию, innerFunc, которая при вызове имеет доступ к лексическому окружению первой. Очень прямо вперед. Теперь давайте сделаем еще один шаг вперед!

Здесь у нас есть функция с именем onlyOnce, которая принимает одну функцию в качестве единственного аргумента и возвращает другую, которая проверяет, была ли вызвана переданная функция. Если нет, то запускает. Если да, то ничего не делает. Другими словами, он как бы «блокируется» после того, как переданная функция вызывается один раз (когда вызывается возвращаемая функция), и никогда не выполняет ее снова благодаря своему закрытию!

Вы уже уловили идею?

Если нет, то здесь опять все максимально просто: замыкание — это способность внутренней функции «запоминать» среду, в которой она была создана, имея доступ к определенным переменным (или переданным аргументам) среды, где это было определено.

Круто, теперь вы поняли… но какое это имеет значение и когда вы будете его использовать?

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

Во-вторых, если говорить более конкретно, замыкания в основном используются для 1. определить закрытые переменные, что поможет сделать ваш код более читабельным и чистым, следуя принципу разделения задач, и 2. частичное применение аргументов функции, которое открывает еще одну фундаментальную тему, о которой я настоятельно рекомендую вам прочитать (и попрактиковаться соответственно), если вы еще этого не сделали: каррирование сильный>.

Я надеюсь, что это немного поможет и расширит ваше понимание замыканий в JavaScript. Вы поняли!

Спасибо, что прочитали!