Самовызывающиеся функции
Обычно определение функции отделяется от ее вызова: сначала определяем функцию, потом ее вызываем. Но это необязательно. Можно создать такие функции, которые будут вызываться сразу при определении, называются они Immediately Invoked Function Expression (IIFE).
<script>
(function(){
document.write("Привет мир" + '<br>');
}());
(function (n){
let result = 1;
for(let i=1; i<=n; i++)
result *=i;
document.write("Факториал числа " + n + " равен " + result);
}(4));
</script>
В окне браузера выведется следующее:
Функции IIFE заключаются в скобки, и после определения функции идет в скобках передача параметров.
Паттерн Модуль
Паттерн Модуль базируется на замыканиях и состоит из двух компонентов: внешняя функция, которая определяет лексическое окружение, и возвращаемый набор внутренних функций, которые имеют доступ к этому окружению.
Определим простейший модуль:
<script>
let foo = (function(){
let obj = {greeting: "hello"};
return {
display: function(){
document.write(obj.greeting);
}
}
})();
foo.display(); // hello
</script>
В примере определена переменная foo, которая представляет результат анонимной функции. Внутри этой функции определен объект obj с некоторыми данными.
Сама анонимная функция возвращает объект, который определяет функцию display. Возвращаемый объект определяет общедоступный API, через который мы можем обращаться к данных, определенным внутри модуля.
return {
display: function(){
document.write(obj.greeting);
}
}
Такая конструкция позволяет закрыть некоторый набор данных в рамках функции – модуля и опосредовать доступ к ним через определенный API – возвращаемые внутренние функции.
Рассмотрим пример посложнее:
let calculator = (function(){
let data = { number: 0};
return {
sum: function(n){
data.number += n;
},
subtract: function(n){
data.number -= n;
},
display: function(){
document.write("Result: ", data.number + '<br>');
}
}
})();
calculator.sum(10);
calculator.sum(3);
calculator.display(); // Result: 13
calculator.subtract(4);
calculator.display(); // Result: 9
calculator.sum(10);
calculator.display(); // Result: 19
Модуль представляет собой примитивный калькулятор, который выполняет три операции: сложение, вычитание и вывод результата.
Все данные инкапсулированы в объект date, который хранит результат операции. Все операции представлены тремя возвращаемыми функциями: sum, subtract и display. Через эти функции можно управлять результатом калькулятора извне.
Дата добавления: 2021-01-26; просмотров: 345;