Иногда нужно сделать так, чтобы некоторые переменные и функции модуля были доступны снаружи. Давайте посмотрим, как это делается. Пусть у нас есть следующий модуль:
;(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('функция модуля');
}
})();
Эскортируйте наружу одну из переменных и две любые функции.
Экспорт объекта
Пусть у нас есть следующий модуль:
;(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('функция модуля');
}
})();
Эскортируйте наружу объект с первыми пятью функциями и первыми двумя переменными.