Замыкания — это функция, связанная/связанная вместе с их лексическим окружением.

Функция по своему лексическому объему образует замыкание.

Функция «у» связывает в своем лексическом окружении функцию «х». И «y» имеет доступ к своей родительской лексической области видимости.

Что такое Лексическое окружение?

Всякий раз, когда создается контекст выполнения, также создается лексическая среда. Лексическое окружение — это локальная память вместе с лексическим окружением родителя.

Лексический. Лексический термин означает иерархию или последовательность.

Функция «с» лексически находится внутри функции «а». А функция «а» лексически находится внутри глобальной области видимости.

Лексическое окружение — это локальная память + родитель ссылочного лексического окружения.

Область действия: доступность переменной функции из разных частей кода.

Каково использование замыканий?

  • Шаблон проектирования модуля. Модули JavaScript являются наиболее часто используемыми шаблонами проектирования для обеспечения независимости отдельных фрагментов кода от других компонентов. Это обеспечивает слабую связь для поддержки хорошо структурированного кода.
  • Каррирование:каррирование берет функцию и предоставляет новую функцию, принимающую один аргумент и возвращающую указанную функцию с ее первым аргументом, равным этому аргументу.
  • Функции как один раз:когда вы передаете свою функциюв качестве аргумента этой функции один раз(в качестве параметра как «функции»), она > возвращает функцию, которую можно вызвать только один раз.
  • Запоминание.Запоминание — этометод ускорения работы приложений за счет кэширования результатов ресурсоемких вызовов функций и возврата их при повторном использовании одних и тех же входных данных.
  • Поддержание состояния в асинхронном мире
  • Итераторы
  • установить время ожидания
  • и многое другое…

Что такое итераторы?

Итератор — это объект, который определяет последовательность и, возможно, возвращаемое значение после его завершения. В частности, итератор — это любой объект, реализующий протокол Iterator с помощью метода next(), который возвращает объект с двумя свойствами:

  • value: Следующее значение в последовательности итераций.
  • done: Это true, если последнее значение в последовательности уже использовано. Если value присутствует рядом с done, это возвращаемое значение итератора.

Что такое setTimeout?

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

Он не ждет; он продолжается и запускает весь код, как вы можете видеть, что «Namaste» печатается до, а «1» печатается после этого, даже по состоянию на заданное время 3000 мс.

Что такое функция обратного вызова?

Благодаря обратному вызову мы можем асинхронизировать вещи в JavaScript.

Когда вы вызываете функцию, и если вы передаете функцию внутри другой функции, эта функция «y» здесь является функцией обратного вызова. И это зависит от «x», когда он хочет вызвать функцию «y», поэтому он известен как функция обратного вызова.

Ее еще называют основной нитью. Все, что выполняется внутри веб-страницы, выполняется только через стек вызовов. Если какая-либо операция блокирует стек вызовов, она скажет, что блокирует поток.

Вышеупомянутый способ ожидания в функции предотвращает блокировку операции.

Что такое стек вызовов?

Стек вызовов используется JavaScript для отслеживания нескольких вызовов функций — какая функция выполняется в данный момент, какие функции вызываются из этой функции и т. д. Это похоже на настоящий стек в структурах данных, куда данные можно помещать, извлекать и следует принципу «последним пришел — первым ушел» (LIFO).

  • Когда сценарий вызывает функцию, интерпретатор добавляет ее в стек вызовов, а затем начинает выполнять функцию.
  • Любые функции, вызываемые этой функцией, добавляются в стек вызовов выше и выполняются там, где достигаются их вызовы.
  • Когда текущая функция завершена, интерпретатор удаляет ее из стека и возобновляет выполнение с того места, где оно было остановлено в последнем листинге кода.
  • Если стек занимает больше места, чем было выделено, выдается ошибка «переполнение стека».

Каковы преимущества закрытия?

Это помогает в сокрытии и инкапсуляции данных. Сокрытие данных похоже на то, что если у нас есть переменная, и мы хотим иметь над ней некоторую конфиденциальность данных, которая, как и другие функции или фрагменты кода, не может иметь доступ к этим конкретным данным, которые известны как данные, скрывающие конфиденциальность или инкапсулирующие данные.

Каковы недостатки замыканий?

Чрезмерное потребление памяти, когда мы используем замыкания, потому что всякий раз, когда замыкание формируется, оно потребляет много памяти, а те, которые закрываются по переменным, не собираются мусором, что означает накопление большого количества памяти, если мы создаем много замыканий и если не можем обработать это, может привести к утечки памяти из-за того, что эта память накапливается сверхурочно, также могут привести к зависанию браузера, если с ним не обращаться должным образом.

Что такое сборщик мусора?

Программа в браузере движка JavaScript как бы замораживает неиспользуемую память, так как JavaScript — это HHL, в отличие от других языков C, C++ и всего, в чем разработчик обрабатывает память, поэтому у него есть сборщик мусора, который удаляет неиспользуемые переменные, если они есть. Просто заморозьте память, когда она узнает, что она больше не нужна.

Сборка мусора и removeEventListener()

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

Надеюсь, после прочтения статьи структура и содержание блога помогли вам понять замыкания в JavaScript!