Это выражение немедленного вызова функции в Javascript:
Чтобы понять IIFE в JS, давайте разберем его:
- Выражение : что-то, что возвращает значение
Пример. Попробуйте выполнить следующие действия в консоли Chrome. Это выражения в JS.
a = 10
output = 10
(1+3)
output = 4
- Выражение функции :
Пример:
// Function Expression
var greet = function(name){
return 'Namaste' + ' ' + name;
}
greet('Santosh');
Как работает выражение функции:
- Когда механизм JS запускается впервые (контекст выполнения - фаза создания), эта функция (справа от = выше) не выполняется и не сохраняется в памяти. Переменной 'greet' присваивается значение 'undefined' механизмом JS.
- Во время выполнения (контекст выполнения - фаза выполнения) объект функции создается «на лету» ( он еще не выполнен ), ему присваивается переменная «greet», и его можно вызывать с помощью «greet (» somename) ')'.
3. Выражение немедленного вызова функции:
Пример:
// IIFE
var greeting = function(name) {
return 'Namaste' + ' ' + name;
}('Santosh')
console.log(greeting) // Namaste Santosh.
Как работает IIFE :
- Обратите внимание на '()' сразу после объявления функции. К каждому объекту функции прикреплено свойство CODE, которое можно вызывать. И мы можем вызвать его (или вызвать) с помощью скобок '()'.
- Таким образом, здесь, во время выполнения (Контекст выполнения - Фаза выполнения), объект функции создается и выполняется одновременно
- Теперь переменная приветствия вместо объекта funtion имеет возвращаемое значение (строку)
Типичный вариант использования IIFE в JS:
Следующий шаблон IIFE довольно часто используется.
// IIFE
// Spelling of Function was not correct , result into error
(function (name) {
var greeting = 'Namaste';
console.log(greeting + ' ' + name);
})('Santosh');
- Мы здесь делаем две вещи.
а) Завершение выражения нашей функции внутри фигурных скобок (). Это говорит синтаксическому синтаксическому анализатору, что все, что находится внутри (), является выражением (в данном случае выражением функции) и является допустимым кодом.
б) Мы вызываем эту функцию одновременно, используя () в конце.
Таким образом, эта функция создается и выполняется одновременно (IIFE).
Важный сценарий использования IIFE:
IIFE сохраняет наш код в безопасности.
- IIFE, будучи функцией, имеет свой собственный контекст выполнения, то есть все переменные, созданные внутри него, являются локальными для этой функции и не используются совместно с глобальным контекстом выполнения.
Предположим, у меня есть другой файл JS (test1.js), используемый в моей заявке вместе с iife.js (см. Ниже).
// test1.js
var greeting = 'Hello';
// iife.js
// Spelling of Function was not correct , result into error
(function (name) {
var greeting = 'Namaste';
console.log(greeting + ' ' + name);
})('Santosh');
console.log(greeting) // No collision happens here. It prints 'Hello'.
Таким образом, IIFE помогает нам писать безопасный код, в котором мы непреднамеренно не сталкиваемся с глобальными объектами.