Самовызывающиеся функции


Обычно определение функции отделяется от ее вызова: сначала определяем функцию, потом ее вызываем. Но это необязательно. Можно создать такие функции, которые будут вызываться сразу при определении, называются они 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; просмотров: 276;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.