You don't know js(up & going)
Download 424.95 Kb. Pdf ko'rish
|
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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling