Выражение Функции , вызываемое немедленно ((ЖИЗНЬ для друзей) – это способ выполнять функции немедленно, как только они созданы.
Жизни очень полезны, потому что они не загрязняют глобальный объект , и они являются простым способом изолировать объявления переменных .
Это синтаксис, который определяет ЖИЗНЬ:
(function() {
/* */
})()Жизнь также может быть определена с помощью функций стрелки:
(() => {
/* */
})()В основном у нас есть функция, определенная в круглых скобках, а затем мы добавляем () для выполнения этой функции: (/* функция */)() .
Эти заключающие скобки на самом деле являются тем, что заставляет нашу функцию внутренне считаться выражением. В противном случае объявление функции было бы недействительным, потому что мы не указали никакого имени:
Объявления функций требуют имени, в то время как выражения функций этого не требуют.
Вы также можете поместить вызывающие скобки внутри скобок выражения, разницы нет, просто предпочтение стиля:
(function() {
/* */
}())
(() => {
/* */
}())Альтернативный синтаксис с использованием унарных операторов
Существует более странный синтаксис, который вы можете использовать для создания IIFE, но он очень редко используется в реальном мире и основан на использовании любого унарного оператора:
-(function() {
/* */
})() +
(function() {
/* */
})()
~(function() {
/* */
})()
!(function() {
/* */
})()(не работает с функциями стрелок)
По имени ЖИЗНЬ
ЖИЗНЬ также можно назвать обычными функциями (не функциями со стрелками). Это не меняет того факта, что функция не “просачивается” в глобальную область видимости, и ее нельзя вызвать снова после ее выполнения:
(function doSomething() {
/* */
})()Жизнь, начинающаяся с точки с запятой
Вы могли бы увидеть это в дикой природе:
;(function() {
/* */
})()Это предотвращает проблемы при слепом объединении двух файлов JavaScript. Поскольку JavaScript не требует точек с запятой, вы можете объединить файл с некоторыми операторами в последней строке, что приведет к синтаксической ошибке.
Эта проблема, по сути, решается с помощью “умных” пакетов кода, таких как webpack.
Оригинал: “https://flaviocopes.com/javascript-iife/”