You don't know js(up & going)


Download 424.95 Kb.
Pdf ko'rish
bet41/53
Sana08.11.2023
Hajmi424.95 Kb.
#1757840
1   ...   37   38   39   40   41   42   43   44   ...   53
Bog'liq
You don\'t know JS(up & going)

____________________________________________________________________
Функция `User()` служит как внешняя область видимости, которая хранит
переменные `username` и `password`, а также внутреннюю функцию `doLogin()`.
Всё это частные внутренние детали этого модуля `User`, которые недоступны из
внешнего мира.
**Предупреждение:** Мы не вызываем тут `new User()` намеренно, несмотря на
тот факт, что это будет более естественно для большинства читателей. `User()` —
просто функция, а не класс, поэтому она вызывается обычным образом.
Использование `new` было бы неуместной тратой ресурсов.
При выполнении `User()` создается *экземпляр* модуля `User`: новая область
видимости и также совершенно новая копия каждой из внутренних
переменных/функций. Мы присваиваем этот экземпляр в `fred`. Если мы
запустим `User()` снова, то получим новый экземпляр, никак не связанный с
`fred`.
У внутренней функции `doLogin()` есть замыкание на `username` и `password`,
что значит, что она сохранит свой доступ к ним даже после того, как функция
`User()` завершит свое выполнение.
`publicAPI` — это объект с одним свойством/методом, `login`, который является
ссылкой на внутреннюю функцию `doLogin()`. Когда мы возвращаем `publicAPI`
из `User()`, он становится экземпляром, который мы назвали `fred`.
На данный момент внешняя функция `User()` закончила выполнение. Как
правило, вы думаете, что внутренние переменные, такие как `username` и
`password`, при этом исчезают. Но они никуда не деваются, потому что есть
замыкание в функции `login()`, хранящее их.


Вот поэтому мы можем вызвать `fred.login(..)`, что подобно вызову внутренней
`doLogin(..)`, и у нее все еще будет доступ ко внутренним переменным
`username` и `password`.
Не исключено, что после краткого обзора замыканий и модульных шаблонов для
вас что-то останется неясным. Ничего страшного! Понадобится практика, чтобы
намотать всё это на ус.
Почитайте книгу этой серии *Область видимости и замыкания* для получения
более детальных объяснений.

Download 424.95 Kb.

Do'stlaringiz bilan baham:
1   ...   37   38   39   40   41   42   43   44   ...   53




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling