Рубрики
Без рубрики

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

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

Выражение Функции , вызываемое немедленно ((ЖИЗНЬ для друзей) – это способ выполнять функции немедленно, как только они созданы.

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

Это синтаксис, который определяет ЖИЗНЬ:

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

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

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

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

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

Объявления функций требуют имени, в то время как выражения функций этого не требуют.

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

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

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

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

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

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

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

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

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

По имени ЖИЗНЬ

ЖИЗНЬ также можно назвать обычными функциями (не функциями со стрелками). Это не меняет того факта, что функция не “просачивается” в глобальную область видимости, и ее нельзя вызвать снова после ее выполнения:

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

Жизнь, начинающаяся с точки с запятой

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

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

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

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

Оригинал: “https://flaviocopes.com/javascript-iife/”