Выражения функции немедленного вызова JavaScript (IIFE)

Выражение функции с немедленным вызовом - это способ немедленно выполнять функции, как только они созданы. IIFE очень полезны, потому что они не загрязняют глобальный объект и представляют собой простой способ изолировать объявления переменных.


AnНемедленно вызываемое выражение функции(IIFE для друзей) - это способ немедленно выполнять функции, как только они созданы.

IIFE очень полезны, потому чтоони не загрязняют глобальный объект, и это простой способизолировать объявления переменных.

Это синтаксис, который определяет IIFE:

(function() {
  /* */
})()

IIFE также могут быть определены с помощью стрелочных функций:

(() => {
  /* */
})()

В основном у нас есть функция, определенная в круглых скобках, а затем мы добавляем()для выполнения этой функции:(/* function */)().

Эти круглые скобки на самом деле делают нашу функцию внутренне выражением. В противном случае объявление функции было бы недопустимым, потому что мы не указали никакого имени:

Invalid function declaration

Для деклараций функций требуется имя, а для выражений функций оно не требуется.

Вы также можете поставить вызывающие скобкивнутрискобки выражения, нет никакой разницы, просто предпочтение стиля:

(function() {
  /* */
}())

(() => { /* */ }())

Альтернативный синтаксис с использованием унарных операторов

Есть более странный синтаксис, который вы можете использовать для создания IIFE, но он очень редко используется в реальном мире и основан на использованиилюбойунарный оператор:

-(function() {
  /* */
})() +
  (function() {
    /* */
  })()

~(function() { /* */ })()

!(function() { /* */ })()

(не работает со стрелочными функциями)

Названный IIFE

IIFE также можно назвать обычными функциями (не стрелочными функциями). Это не меняет того факта, что функция не «просачивается» в глобальную область видимости и не может быть вызвана повторно после выполнения:

(function doSomething() {
  /* */
})()

IIFE, начинающиеся с точки с запятой

Вы можете увидеть это в дикой природе:

;(function() {
  /* */
})()

Это предотвращает проблемы при слепом соединении двух файлов JavaScript. Поскольку JavaScript не требует точки с запятой, вы можете объединить файл с некоторыми операторами в его последней строке, что вызовет синтаксическую ошибку.

Эта проблема, по сути, решается с помощью «умных» сборщиков кода, таких какwebpack.

Скачать мою бесплатнуюРуководство для начинающих по JavaScript


Больше руководств по js: