IIFE (немедленно вызываемые функциональные выражения) в Javascript

В Javascript (JS) IIFE (выражение немедленно вызываемой функции) позволяет выполнять функции сразу после их создания.

Мы получаем следующие преимущества от IIFEs:

  • Не засоряют глобальный объект переменными и функциями
  • Это простой способ изолировать объявления переменных.

Ниже приведены примеры синтаксиса IIFE:

(function() {
  /* */
})()

Вот еще один пример использования стрелочной функции =›:

(() => {
  /* */
})()

/* */ указывает, где написана функция.

Глобальная проблема с объектами

Когда функция создается, она добавляется к глобальному объекту. Возьмем следующий пример кода:

function mult(x,y) {     
   return x * y; }

Это простая функция под названием mult, которая принимает 2 параметра, переменные x и y. Затем он возвращает результат как произведение двух переменных.

Функция после создания добавляется в глобальный объект window(). Переменная, объявленная вне функции, также добавляется к глобальному объекту.

var counter;

Мы можем увидеть результат или вывод с помощью команды console.log().

console.log(window.mult)
console.log(window.counter)

Когда вы объявили много глобальных переменных и функций, механизм JS освобождает выделенную память только тогда, когда глобальный объект теряет свои области видимости. Это приводит к неэффективному использованию памяти.

Еще одна проблема, которую это может создать, — это конфликты имен. Это загрязняет глобальный объект, засоряя его и делая программу менее эффективной.

IIFE как выражения

Мы также можем записывать функции в виде выражений. Использование круглых скобок делает функцию внутренне рассматриваемой как выражение. Функциональное выражение не требует имени, поэтому его не нужно добавлять в глобальный объект. Это позволяет выполнять без вызова имени.

Например, мы можем переписать код следующим образом:

let mult = (function(x,y){     
   return x * y; 
})(3, 8);  
console.log(mult);

Мы присваиваем вызов функции переменной с именем mult. Это возвращает ответ, который равен 24.

Теперь давайте создадим IIFE, используя общий синтаксис, переписав код:

(function(x,y){         
   return x * y; 
})(3,8);

Функция создается как выражение, которое выполняется немедленно, без предварительного добавления к глобальному объекту.

Синопсис

Используйте IIFE для выполнения функции как выражения, не требуя имени, что помогает избежать конфликтов, если функции имеют одно и то же имя из разных программ. Это сводит к минимуму добавление функций и переменных к глобальному объекту в памяти. Это делает выполнение быстрее и использование памяти более эффективным. Это влияет на то, как программа работает в критические моменты.