Может показаться странным, но это не так уж чужеродно, как кажется на первый
взгляд. Посмотрите на сходства между `foo` и `IIFE` тут:
_____________________________________________________
function foo() { .. }
// `foo` выражение со ссылкой на функцию,
// затем `()` выполняют ее
foo();
// Выражение с функцией `IIFE`,
// затем `()` выполняют ее
(function IIFE
.. })();
_____________________________________________________
Как видите, содержимое `(function IIFE
.. })` до ее вызова в `()` фактически
такое же, как включение `foo` до его вызова после `()`. В обоих случаях ссылка
на функцию выполняется с помощью `()` сразу после них.
Так как IIFE — просто функция, а функции создают *область видимости*
переменных, то использование IIFE таким образом обычно происходит, чтобы
объявлять переменные, которые не будут влиять на код, окружающий IIFE
снаружи:
_____________________________________________________
var a = 42;
(function IIFE
var a = 10;
console.log( a );
// 10
})();
console.log( a );
// 42
_____________________________________________________
Функции IIFE также могут возвращать значения:
_____________________________________________________
var x = (function IIFE
return 42;
})();
x;
// 42
Do'stlaringiz bilan baham: