Кайл Симпсон

Вы не знаете JS. Замыкания и объекты

Сообщить о появлении
Загрузите файл EPUB или FB2 на Букмейт — и начинайте читать книгу бесплатно. Как загрузить книгу?
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Возвращать фактический объект (литерал) из модуля не обя-

    зательно. Также можно вернуть внутреннюю функцию напря-

    мую. jQuery служит хорошим примером такого рода. Иденти-

    фикаторы jQuery и $ предоставляют открытый API для модуля

    jQuery, но сами по себе они являются обычными функциями

    (которые тоже могут обладать свойствами, поскольку все

    функции являются объектами).
  • Amiran Bestaev (CHICO)цитирует3 года назад
    По сути, возвращаемый объект

    может рассматриваться как открытый программный интерфейс

    (API) нашего модуля.
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Этот паттерн JavaScript называется модулем. Самый распростра-

    ненный способ реализации паттерна «модуль» часто называется

    предоставлением (revealing) модуля; именно эта разновидность

    представлена выше.
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Какой бы механизм ни использовался для транспортировки вну-

    тренней функции за пределы ее области видимости, она поддер-

    живает ссылку на область видимости, в которой была изначально

    объявлена, — и при каждом ее выполнении будет задействована

    эта ссылка.
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Замыкание — способность функции запоминать свою лексиче-

    скую область видимости и обращаться к ней даже тогда, когда

    функция выполняется вне своей лексической области видимости.
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Сначала функции

    Поднимаются как объявления функций, так и объявления пере-

    менных. Но здесь есть один нюанс (который может проявиться

    в коде с несколькими «дубликатами» объявлений): сначала под-

    нимаются функции, а затем переменные.
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Итак, на этот процесс можно взглянуть так (в метафорическом

    смысле): объявления переменных и функций «перемещаются» из

    их текущей позиции в начало кода. При этом происходит поднятие

    (hoisting).

    Другими словами, «яйцо» (объявление) следует перед «курицей»

    (присваивание).

    Поднимаются только сами объявления, а все присваивания

    и другая исполняемая логика остаются на своих местах. Если

    бы поднятие могло изменять исполняемую логику кода, это

    породило бы сущий хаос в программе.
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Объявление явных блоков для переменных с целью их локальной

    привязки — мощный инструмент, который вам стоит добавить

    в свой инструментарий программирования.
  • Amiran Bestaev (CHICO)цитирует3 года назад
    Однако объявления с let не будут подниматься на всю область

    видимости того блока, в котором они присутствуют. Такие объ-

    явления не будут «существовать» в блоке до команды объявле-

    ния.

    { console.log( bar ); // ReferenceError!

    let bar = 2;

    }
  • Amiran Bestaev (CHICO)цитирует3 года назад
    К счастью, в ES6 ситуация изменилась. Появилось новое ключе-

    вое слово let, которое используется наряду с var для объявления

    переменных.

    Ключевое слово let присоединяет объявление переменной к об-

    ласти видимости того блока (обычно паре фигурных скобок {..}), в которой оно содержится. Иначе говоря, let неявно заимствует

    область видимости любого блока для объявления своей перемен-

    ной.
fb2epub
Перетащите файлы сюда, не более 5 за один раз