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

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

`;(function() { function func1() { alert('функция модуля'); } function func2() { alert('функция модуля'); } function func3() { alert('функция модуля'); } })();`

Пусть мы хотим экспортировать наружу все три функции. В этом случае, чтобы не плодить снаружи модуля лишних имен функций, лучше записать все функции в один объект и выполнить экспорт этого объекта:

`;(function() { function func1() { alert('функция модуля'); } function func2() { alert('функция модуля'); } function func3() { alert('функция модуля'); } window.module = {func1: func1, func2: func2, func3: func3}; })();`

Так как имена ключей и переменных совпадают, то объект с функциями можно упросить:

`;(function() { function func1() { alert('функция модуля'); } function func2() { alert('функция модуля'); } function func3() { alert('функция модуля'); } window.module = {func1, func2, func3}; })();`

Можно пойти и другим путем. Будем записывать функции в объект сразу при описании функции, вот так:

`;(function() { let module = {}; module.func1 = function() { alert('функция модуля'); } module.func2 = function() { alert('функция модуля'); } module.func3 = function() { alert('функция модуля'); } window.module = module; })();`

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

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

Экспортируйте наружу объект с первыми пятью функциями и первыми двумя переменными.

← →
↑
en ru