IIFE
Функція, яка викликає сама себе (англ. IIFE - Immediately Invoked Function Expression) - це функція, яка створюється і викликається одразу ж, без окремого виклику за ім'ям.
Синтаксис:
(function () {
console.log('Я виконався одразу після оголошення!');
})();Зверни увагу на дві пари дужок:
- Перша
(function() { ... })- перетворює функцію на функціональний вираз. - Друга
()- негайно викликає цю функцію.
Приклад з параметрами:
(function (name) {
console.log(`Привіт, ${name}!`);
})('Tim');Виведе:
Привіт, Tim!Для чого використовується IIFE
1. Створення ізольованої області видимості
IIFE часто застосовують, щоб уникнути конфліктів змінних - наприклад, під час написання коду, який не повинен "забруднювати" глобальну область (window або global).
(function() {
const secret = 'Секрет всередині функції';
console.log(secret);
})();
console.log(secret); // ReferenceError: secret is not definedЗмінна secret доступна тільки всередині IIFE.
2. Ініціалізація коду один раз
Можна використовувати IIFE, щоб щось виконати одноразово під час завантаження:
const config = (() => {
const apiKey = '12345';
const baseUrl = 'https://api.example.com';
return { apiKey, baseUrl };
})();
console.log(config.apiKey); // 12345Повертаємо об'єкт, але змінні всередині залишаються інкапсульованими.
3. Використання з async / await
IIFE можна зробити асинхронною, щоб використовувати await на верхньому рівні:
(async () => {
const data = await fetch('/api/data').then(res => res.json());
console.log(data);
})();Історично
До появи модулів ES6 (де тепер кожна import/export-файлова одиниця має свою область видимості),
IIFE активно використовувалися в JavaScript для інкапсуляції та структурування коду.
Зараз їх рідше використовують, але вони все ще корисні для:
- одноразової ініціалізації,
- ізоляції тимчасових змінних,
- негайного виконання async-коду.
Коротко:
| Характеристика | Опис |
|---|---|
| Назва | IIFE - Immediately Invoked Function Expression |
| Суть | Функція створюється і одразу викликається |
| Навіщо | Ізоляція, ініціалізація, тимчасові змінні |
| Особливості | Не забруднює глобальну область, може бути async |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.