> Что такое самовызывающаяся функция (IIFE) в JavaScript (JavaScript)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: Софт Медиа Групп, 1221 Systems

Стек: JavaScript

> Пример ответа

Короткий ответ

IIFE (Immediately Invoked Function Expression) - это функция в JavaScript, которая объявляется и сразу же вызывается. Синтаксически это выражение функции, обёрнутое в круглые скобки, с последующим вызовом: (function() { ... })(). Основное назначение - создание изолированной области видимости, чтобы не засорять глобальный scope переменными и избегать конфликтов имён.

Подробное объяснение

В JavaScript функции создают собственную область видимости. Обычное объявление функции (function foo() {}) добавляет имя в окружающий scope. IIFE же - это function expression, который не сохраняет имя в окружающей области, а выполняется немедленно.

Ключевые особенности:

  • Всё, что объявлено внутри IIFE (var, let, const, вложенные функции), остаётся внутри неё и недоступно снаружи.
  • IIFE может принимать аргументы и возвращать значение.
  • Используется для создания модулей, инкапсуляции логики, избегания загрязнения глобального объекта.
  • До появления let/const и модулей ES6 IIFE был основным способом создания приватных переменных.

Синтаксис: функция-выражение оборачивается в скобки, чтобы парсер воспринял её как выражение, а не как объявление. Затем добавляются скобки вызова.

На практике

IIFE часто применяется:

  • для инициализации кода, который должен выполниться один раз при загрузке страницы;
  • для создания замыканий с приватным состоянием;
  • для изоляции библиотек и плагинов от внешнего кода;
  • в старом коде - для эмуляции модулей до появления ES modules.

Современная альтернатива - блоки {} с let/const или модули ES6, но IIFE всё ещё встречается в легаси-коде и в некоторых паттернах (например, при передаче глобальных объектов как аргументов для минификации).

Пример кода

JAVASCRIPT
// Базовая IIFE
(function() {
const message = 'Привет из IIFE';
console.log(message);
})(); // выведет: Привет из IIFE
// IIFE с аргументами
(function(global, name) {
global.sayHello = function() {
console.log('Hello, ' + name);
};
})(window, 'Alice');
window.sayHello(); // Hello, Alice
// IIFE с возвратом значения
const counter = (function() {
let count = 0;
return {
increment: function() { count++; },
get: function() { return count; }
};
})();
counter.increment();
counter.increment();
console.log(counter.get()); // 2
// count недоступен снаружи - counter.count === undefined

Как отвечать на собеседовании

Начни с короткого определения: "IIFE - это функция, которая вызывается сразу после объявления". Затем покажи синтаксис и объясни, зачем нужны скобки вокруг функции. Обязательно упомяни главную цель - изоляцию области видимости и защиту глобального объекта от загрязнения. Приведи пример с приватной переменной через замыкание. Если спросят про современные альтернативы, скажи про let/const в блоках и ES modules. Говори уверенно, без лишних деталей, но покажи понимание замыканий.

Что проверяет интервьюер

Интервьюер хочет убедиться, что ты:

  • понимаешь разницу между function declaration и function expression;
  • знаешь, как работает область видимости в JavaScript;
  • можешь объяснить, зачем нужна изоляция кода;
  • понимаешь связь IIFE с замыканиями;
  • знаешь, когда IIFE уместна, а когда лучше использовать современные средства.

Типичные ошибки

  • Путать IIFE с обычным вызовом функции: function() {}() - это синтаксическая ошибка, нужны скобки вокруг выражения.
  • Говорить, что IIFE - это способ объявления функций. На самом деле это способ немедленного выполнения function expression.
  • Не упоминать замыкания - главную практическую пользу IIFE.
  • Утверждать, что IIFE устарела и не нужна. Она всё ещё используется, хотя и реже.
  • Забывать, что IIFE может принимать аргументы и возвращать значение - это часто спрашивают в уточняющих вопросах.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью