> Что такое самовызывающаяся функция (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 может принимать аргументы и возвращать значение - это часто спрашивают в уточняющих вопросах.
> Похожие задачи по frontend
Как отлавливать ошибки промисов в JavaScript
Изменяется ли исходный массив при вызове метода sort в JavaScript и почему
Как работать с Promise в цепочках
Почему setTimeout выполняется после микрозадач в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью