# Экспорт переменных и функций в модулях через замыкания в JavaScript

Иногда нужно сделать так, чтобы некоторые переменные и функции модуля были доступны снаружи. Давайте посмотрим, как это делается. Пусть у нас есть следующий модуль:

`;(function() { let str = 'переменная модуля'; function func() { alert('функция модуля'); } })();`

Давайте экпортируем нашу функцию `func`. Для этого запишем ее в свойство встроенного в браузер объекта `window`:

`;(function() { let str = 'переменная модуля'; function func() { alert('функция модуля'); } window.func = func; })();`

Теперь мы можем вызвать нашу функцию снаружи модуля:

`;(function() { let str = 'переменная модуля'; function func() { alert('функция модуля'); } window.func = func; })(); window.func(); // выведет 'функция модуля'`

При этом не обязательно вызывать функцию как свойство объекта `window`:

`;(function() { let str = 'переменная модуля'; function func() { alert('функция модуля'); } window.func = func; })(); func(); // выведет 'функция модуля'`

Дан следующий модуль:

`;(function() { let str1 = 'переменная модуля'; let str2 = 'переменная модуля'; let str3 = 'переменная модуля'; function func1() { alert('функция модуля'); } function func2() { alert('функция модуля'); } function func3() { alert('функция модуля'); } })();`

Экспортируйте наружу одну из переменных и две любые функции.

←→
↑
en ru