JavaScript Espressioni di funzioni invocate immediatamente


Esempio

A volte non vuoi avere la tua funzione accessibile / memorizzata come variabile. È possibile creare un'espressione funzione immediatamente richiamata (IIFE in breve). Queste sono essenzialmente funzioni anonime autoeseguite . Hanno accesso all'ambito circostante, ma la funzione stessa e qualsiasi variabile interna saranno inaccessibili dall'esterno. Una cosa importante da notare su IIFE è che anche se si nomina la propria funzione, IIFE non viene issato come le funzioni standard e non possono essere chiamate dal nome della funzione con cui sono dichiarate.

(function() {
   alert("I've run - but can't be run again because I'm immediately invoked at runtime,
          leaving behind only the result I generate");
}());

Questo è un altro modo per scrivere IIFE. Si noti che la parentesi di chiusura prima del punto e virgola è stata spostata e posizionata subito dopo la parentesi graffa di chiusura:

(function() {
   alert("This is IIFE too.");
})();

Puoi facilmente passare i parametri in un IIFE:

(function(message) {
   alert(message);
}("Hello World!"));

Inoltre, è possibile restituire valori all'ambito circostante:

var example = (function() {
   return 42;
}());
console.log(example); // => 42

Se necessario è possibile nominare un IIFE. Sebbene sia visto meno spesso, questo pattern presenta diversi vantaggi, come fornire un riferimento che può essere usato per una ricorsione e può semplificare il debugging come il nome è incluso nel callstack.

(function namedIIFE() { 
    throw error; // We can now see the error thrown in 'namedIIFE()'
}());

Mentre avvolgere una funzione tra parentesi è il modo più comune per indicare al parser Javascript di aspettarsi un'espressione, nei luoghi in cui è già prevista un'espressione, la notazione può essere resa più concisa:

var a = function() { return 42 }();
console.log(a)  // => 42

Versione della freccia della funzione immediatamente richiamata:

6
(() => console.log("Hello!"))(); // => Hello!