Що таке термін для анонімної функції JavaScript, яка викликається негайно?


29

Я пишу керівництво по стилю JavaScript для своєї команди, щоб ми могли легше організувати та надати свої документи. Але я потрапив на невелику шишку, і саме тут стосується мого питання ...

Що я повинен викликати анонімною функцією JavaScript, яка викликається негайно. Я знаю, що міг би просто назвати це "анонімною функцією", але я хотів би підкреслити той факт, що його викликають негайно.

Ось приклад:

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"

1
Зауважте, що ви часто будете бачити цю конструкцію (неточно), яку називають "функцією
самовиклику

Відповіді:


39

У них вже є термін для цього у світі Javascript. Їх називають виразами функцій негайно викликаних функцій (IIFE) .

Що це

Функціям IIFE не надається ім'я. Натомість вони виконуються один раз, коли перекладач натрапляє на них:

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

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

Якщо ви пишете декларацію функції, ви повинні додати операторів групування або круглих дужок, що оточують функцію, щоб сказати інтерпретатору трактувати функцію як вираз, який можна негайно викликати:

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


Коли вони використовуються

IIFE використовуються для коду, який потрібно виконувати лише один раз у межах завдання, а не повторно викликати.

  1. Як аргумент, коли викликається функція (для обчислення значень тощо)
  2. Щоб призначити об'єкту значення властивості.
  3. Обробники подій та слухачі.
  4. Щоб запобігти конфліктам між двома сценаріями, які можуть використовувати однакові імена змінних. Їх можна використовувати як обгортки для скидання коду в інший сценарій, де ви не впевнені, чи можуть імена змінних однакові.

Один нитпок: У вашому прикладі, що використовує var area = ..., вам не потрібні «обгортаючі» дужки функції, оскільки це вже вираження функції в силу того, що ви знаходитесь в правій частині вікна =. Обертові дужки потрібні лише тоді, коли функція записана як декларація функції (тобто без провідних var area = ...).
Ерік Кінг

@EricKing я зробив це правильно?
Лоуренс Айелло

Було б непогано мати можливість більш невимушено називати ці «експрес-функції»
ситечко

@LawrenceAiello Я додав редагування, щоб показати, що я маю на увазі. Сподіваємось, це все-таки працює для вас.
Ерік Кінг

Як пов’язане питання, чи є підстави передавати аргумент IIFE, як показано на запитання? Я коли-небудь бачив подібні, як ви демонструєте - без жодних аргументів (оскільки будь-який аргумент може бути локальною змінною).
Кет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.