Immediately Invoked Function Expression (IIFE) — это функция, которая определяется и выполняется одновременно. Она создаёт приватную область видимости, гарантируя, что переменные, объявленные внутри неё, не попадают в глобальное пространство имён.
Два распространённых варианта:
// Традиционное функциональное выражение
(function() {
// код здесь
})();
// Вариант со стрелочной функцией (ES6+)
(() => {
// код здесь
})();
Внешние скобки превращают функцию в выражение, а завершающие () сразу же вызывают её.
Главная цель IIFE — изоляция области видимости:
До появления ES6-модулей IIFE были стандартным паттерном для создания инкапсулированного, модульного кода:
const counter = (function() {
let count = 0; // приватная переменная
return {
increment: () => ++count,
getCount: () => count
};
})();
counter.increment();
counter.getCount(); // 1
В современном JavaScript ES6-модули (import/export) обеспечивают инкапсуляцию из коробки, поэтому необходимость в IIFE снизилась — хотя они по-прежнему удобны для логики одноразовой инициализации.
IIFE обязательно должна использовать традиционное ключевое слово function; стрелочные функции не могут быть использованы в синтаксисе IIFE, потому что они не поддерживают немедленный вызов.
Новый — ещё не проверен сообществом
Вы