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-формате.