diff --git a/js/closures/index.md b/js/closures/index.md index 5ceebd5a0d..6f36460113 100644 --- a/js/closures/index.md +++ b/js/closures/index.md @@ -10,6 +10,8 @@ authors: - bespoyasov editors: - tachisis +contributors: + - vitya-ne keywords: - замыкание - closure @@ -56,7 +58,7 @@ _Глобальная область видимости_ — это самая const a = 42 ``` -Переменная в примере сейчас находится в глобальной области видимости. Это значит, что она будет доступна откуда угодно внутри модуля: +Переменная в примере сейчас находится в глобальной области видимости. Это значит, что она будет доступна откуда угодно: ```js const a = 42 @@ -117,6 +119,33 @@ console.log(window) Это сработает только с [`var`](/js/var-let/), но не с [`let`](/js/var-let/) или [`const`](/js/const/). Почему, мы узнаем чуть позже. +## Модульная область видимости + +При использовании модулей, переменная объявляемая вне функций будет доступна, но только в том же модуле где она создана. + +```js +// module1.js +const a = 42 + +function wrap() { + const b = a + // переменная `a` доступна в функции +} + +let c = 0 +if (a < 100) { + c = a + // переменная `a` доступна в блоке +} + +// module2.js +console.log(a) +// ReferenceError: a is not defined +``` + +Для предоставления доступа к определённым данным модуля их необходимо экспортировать. +Разделение на модули упрощает задачу структурирования кода. Это особенно важно для больших проектов. + ## Блочная область видимости _Блочная область видимости_ ограничена программным блоком, обозначенным при помощи `{` и `}`. Простейший пример такой области — это выражение внутри скобок: