JavaScript

Что такое IIFE?

IIFE - Immediately Invoked Function Expression

IIFE - это функция, которая объявляется и немедленно вызывается.

Синтаксис

// Классический
(function() {
  var secret = "приватная переменная"
  console.log("Выполнено!")
})()

// Стрелочная
(() => {
  console.log("Тоже IIFE")
})()

// Альтернативный вариант с ! или +
!function() { console.log("IIFE") }()

Зачем нужна

До появления модулей ES6 IIFE была основным способом создать изолированную область видимости и избежать загрязнения глобального пространства имён.

// Раньше (до ES6 modules):
(function($) {
  // $ не конфликтует с другими библиотеками
  $(document).ready(function() { ... })
})(jQuery)

// Приватный модуль
const Counter = (function() {
  let count = 0  // приватная переменная
  return {
    increment: () => ++count,
    get: () => count
  }
})()

Counter.increment()
Counter.get()  // 1

Современные альтернативы

// ES6 блок + let/const - изолированная область
{
  const secret = "приватная"
  console.log(secret)
}
// secret недоступна снаружи

// ES6 модули - идеальная изоляция
// каждый файл имеет свою область видимости

IIFE всё ещё полезна для: немедленного выполнения async-кода ((async () => { await ... })()), сложных инициализаций, библиотек в UMD-формате.

Источники