IIFE (” Immediately Invoked Function Expression ”) - немедленно вызываемое функциональное выражение.

У традиционной формы IIFE существует небольшая вариация, которую предпочитают некоторые разработчики: (function() { .. }()).

IIFE предназначен для того, чтобы вызывать функции для передачи аргументов.

Пример:

var a = 2;
 
(function IIFE( global ){
	var a = 3;
	console.log( a ); // 3
	console.log( global.a ); // 2
})( window );
 
console.log( a ); // 2

Здесь передается ссылка на объект window, но параметру присваивается имя global, чтобы в программе существовало четкое стилистическое разграничение между глобальными и неглобальными ссылками.

Другое применение этого паттерна решает (второстепенную и специфическую) проблему с некорректной перезаписью значений идентификатора default по умолчанию, приводящей к неожиданным результатам. Если присвоить параметру имя undefined, но не передать значение этого аргумента, можно гарантировать, что идентификатор undefined действительно соответствует неопределенному значению в блоке кода:

undefined = true; // Создает ловушку для другого кода! // Не делайте так!z

(function IIFE( undefined ){
	var a;
	if (a === undefined) {
	console.log( "Undefined is safe here!" );
}
})();

Еще одна вариация на тему IIFE меняет порядок вещей: выполняемая функция передается в последнюю очередь, после вызова и передаваемых параметров. Этот паттерн используется в проекте UMD (Universal Module Definition).

Некоторые разработчики считают, что он чуть более понятен, хотя и не столь компактен.

var a = 2;
(function IIFE( def ){
	def( window );
	})
(function def( global ){
	var a = 3;
	console.log( a ); // 3
	console.log( global.a ); // 2
});

Функциональное выражение def определяется во второй половине фрагмента, а затем передается как параметр (также с именем def) функции IIFE, определяемой в первой половине фрагмента.

Наконец, параметр def (функция) вызывается с передачей window как параметра global.