Поговорим о закрытии, закрытии Javascript.

Замыкание иногда было модным словом в сообществе Javascript. Существует высокая вероятность того, что вы знаете концепцию или использовали / наблюдали, что такое закрытие, не зная (потому что я когда-то знал).

Прежде чем мы перейдем к завершению, давайте поговорим о лексической области видимости.

Что такое лексическая область видимости…?

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

Поскольку функции также определены в это время (фаза лексирования), мы можем сказать, что лексическая область видимости зависит от того, где существуют переменные и блоки области видимости, когда код был написан, и, таким образом, заблокированы в конце фазы лексирования. Область не определяется во время выполнения, а доступна только во время выполнения. Между прочим, область видимости - это причудливый способ места, где движок javascript будет искать что-то.

Закрытие

Замыкание - это функция в JavaScript, при которой внутренняя функция имеет доступ к переменным внешней (включающей) функции - цепочке областей видимости. Это означало, что функция может запоминать и получать доступ к своей лексической области видимости, даже если эта функция выполняется вне ее лексической области видимости. Я предполагал, что вы уже знаете об объемах, если об этом нет хорошей статьи.

Это означает, что innerFunction, определенный внутри outerFunction, будет иметь доступ к внешней области видимости outerFunction, также если будет возвращен внутри нее и вызван вне outerFunction или, другими словами, вне ее области видимости, ее лексической области !. Лексический объем определяется по времени автора и фиксируется во время компиляции, как было подчеркнуто ранее.

Замыкание имеет три цепочки областей видимости:

  • он имеет доступ к своей собственной области видимости - переменным, определенным в его фигурных скобках (например, innerFuctionVariable)
  • он имеет доступ к переменным внешней функции (например, outerFuctionVariable)
  • он имеет доступ к глобальным переменным (например, globalVariable)

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

Где / когда мне нужно закрытие? ...

Есть много вариантов использования для закрытия, но в последнее время из-за широкого использования ES6 и выше в разработке мы видели, как много используются классы Javascript. Но есть также путаница в том, как управлять this, отсюда и использование фабричных функций.

Это будет моя следующая тема, Заводские функции.

С Новым 2019 годом

Быть безопасным.