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

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

Паттерн проектирования IIFE также называется САМООПОЛНЕНИЕМ АНОНИМНОЙ ФУНКЦИИ. Они называются анонимными, поскольку для их вызова не требуется никакого имени и для его самовыполнения, поскольку нет необходимости вызывать функцию, она выполняется сама по себе, как мы уже обсуждали. Следовательно, вполне справедливо называть IIFE одинаковыми.

for example:
(function() {
 document.write(“Hello “);
 var a = ‘Jane’;
 document.write(a);
}) ();
document.write(a);
The output will be "Hello Jane", since the var 'a' inside the IIFE was called but it'll show a syntax error in the console. By the end of the blog you'll be able to answer why the error occurred but I'll leave it for now.

IIFE состоят из двух частей:
1. Анонимная функция с областью действия lex, заключенной в оператор группирования ().
2. Вторая часть создает немедленно выполняющееся выражение функции (), через которое движок сценария java будет напрямую интерпретировать функцию.

The syntax to define IIFEs:
 (function() {
 /* code here */
 })();
Also arrow functions can be used:
 (() => {
 /* code here */
 })();

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

Arrow functions are used to write shorter function syntax, for example instead of writing: 
 hello = function() {
 return “Hello World!”;
 }
we can write:
 
 hello = () => {
 return “Hello World!”;
 } 
 In simple words, it just makes the syntax look shorter.

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

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

function declaration :
function myIntro(){
 //function declaration
};
function expression :
var intro = function() {
 //function expression
};

Именованные IIFE: не обязательно делать IIFE анонимными, IIFE тоже могут иметь имена.

 (function intro() {
  /* code here */
 })();

Но присвоение имен не меняет того факта, что они не могут быть вызваны вне области действия функции или переменные, определенные внутри, больше не безопасны. Они по-прежнему будут называться IIFE, и его функции останутся прежними.

Я надеюсь, что мой первый блог о IIFE был достаточно полезен для вас, чтобы вы перешли на последнюю страницу.
Источник: flaviocopes.com