"Что такое закрытие…?" Этот вопрос должен быть вам хорошо знаком, если вы посещали собеседования, проверяющие ваши знания JavaScript.

ДА…. Это очень распространенный вопрос на собеседованиях по JS. Но плохо то, что многие разработчики JS не смогли дать на это правильный ответ. Не волнуйся…! Сегодня научимся..

Согласно MDN,
Замыкание — это комбинация функции, связанной вместе (enclosed) со ссылками на ее окружающее состояние (лексическое окружение). Другими словами, замыкание дает вам доступ к области действия внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз, когда создается функция, во время создания функции

Кажется немного сложным. Давайте упростим…
«Замыкание — это функция вместе с ее лексической областью видимости/окружением, объединенными вместе»
Просто, как показано на изображении ниже, это не так. это…😎

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

Итак… окружность — это замыкание.

Такие языки, как Java, C#, позволяют нам создавать приватные методы. Раньше в JavaScript не было собственного способа объявления приватных методов, но можно было эмулировать приватные методы с помощью замыканий. Закрытые методы полезны не только для ограничения доступа к коду. Они также предоставляют мощный способ управления вашим глобальным пространством имен. В приведенном ниже примере кода показано, как использовать замыкания для этого.

В приведенном выше коде переменная privateCounter и функция changeBy в функции makeCounter не могут быть доступны снаружи функции makeCounter. Но функция makeCounter выставляет наружу три функции: increment , decrement и value. Эти 3 функции являются замыканиями, которые имеют одну и ту же лексическую область видимости, и privateCounter и changeBy() могут быть доступны через эти 3 функции.

Теперь создайте два экземпляра из функции makeCounter и используйте функции increment, decrement и value, как показано ниже, и проверьте, как они себя ведут.

Обратите внимание, как два счетчика сохраняют свою независимость друг от друга. Каждое замыкание ссылается на другую версию переменной privateCounter через собственное замыкание. Каждый раз, когда вызывается один из счетчиков, его лексическое окружение изменяется за счет изменения значения этой переменной. Изменения значения переменной в одном замыкании не влияют на значение в другом замыкании.

Случаи использования замыканий

  1. Конфиденциальность данных
  2. Обработчики событий и функции обратного вызова
  3. Шаблоны функционального программирования
  4. Шаблон проектирования модуля
  5. Частичные приложения
  6. карри

Сейчас вы прочтете самое интересное в этой статье.
Как будут проверять ваши знания замыканий на собеседовании…

Интервьюер: Что такое закрытие?
Я: ☝️☝️☝️……..💪😂

Интервьюер: Что выводит приведенный выше код?
Я: 20
Интервьюер: Можете ли вы объяснить, как вы получили это?
Я: внутри функции y хранится ссылка на z , а не на его значение.

Интервьюер: Что выводит приведенный выше код?
Я: Он пять раз выводит 4 на консоль.
Интервьюер strong>: НЕПРАВИЛЬНО…! не 4.. это 5..😏

Я: Невозможно. Как это было 5…?
Интервьюер:😎..(Сам: Это был ответ в статье, которую я нашел, погуглив вопросы для интервью по JavaScript 😟)

Просто так…😂 Он не такой парень. Он очень умен.

Интервьюер: Я хочу изменить приведенный выше код, чтобы он печатал 0–4 в пяти строках. Как это изменить?
Я: Мы можем изменить это, как показано ниже…😎

Интервьюер: Хорошо… Это верно. Но вы не можете удалить var из initialisation . Как это сделать?
Я: …..😭
Интервьюер: Пожалуйста, не плачьте. Я скажу тебе. Вы можете сделать это с помощью JS Closures, как показано ниже.

Интервьюер: Сколько замыканий в приведенном выше примере кода?
Я: 2

Интервьюер: Теперь, сколько закрытий?
Я: Пожалуйста, прокомментируйте ответ…😎

Если вы нашли это полезным, пожалуйста, хлопните в ладоши, чтобы другие тоже это увидели.

Все статьи, написанные мной, вы можете найти ЗДЕСЬ и не забудьте СЛЕДИТЬ за мной.