IIFE в JavaScript: що таке вирази функцій відразу ж викликані?

Заява про функцію

Функція, створена за допомогою оголошення функції, є об’єктом Функції та має всі властивості, методи та поведінку об’єктів Функції. Приклад:

 function statement(item){ console.log('Function statement example '+ item); }

Вираз функції

Вираз функції подібний до оператора функції, за винятком того, що ім'я функції можна пропустити для створення анонімних функцій. Приклад:

 var expression = function (item){ console.log('Function expression example '+ item); }

Вирази функцій, що викликаються негайно

Як тільки функція створена, вона сама викликається, не потрібно викликати явно. У наведеному нижче прикладі змінна iife буде зберігати рядок, який повертається виконанням функції.

 var iife = function (){ return 'Immediately Invoked Function Expressions(IIFEs) example '; }(); console.log(iife); // 'Immediately Invoked Function Expressions(IIFEs) example '

Заява перед IIFE завжди повинна закінчуватися знаком; або це викличе помилку.

Поганий приклад :

var x = 2 //no semicolon, will throw error (function(y){ return x; })(x); //Uncaught TypeError: 2 is not a function

Навіщо використовувати вирази функцій з негайним викликом?

 (function(value){ var greet = 'Hello'; console.log(greet+ ' ' + value); })('IIFEs');

У наведеному вище прикладі, коли движок javascript виконує код вище, він створює глобальний контекст виконання, коли бачить код, і створює об'єкт функції в пам'яті для IIFE. І коли він потрапляє в рядок, 46завдяки якій функція викликається, на льоту створюється новий контекст виконання, тому змінна привітання переходить у контекст виконання цієї функції, а не в глобальний, саме це робить її унікальною. This ensures that code inside IIFE does not interfere with other code or be interfered by another codeі тому код безпечний.

Більше інформації

  • Вираз функції, який негайно викликається у Вікіпедії
  • Що робить провідна крапка з комою в бібліотеках JavaScript?