JavaScript Expresiones de función invocadas de inmediato


Ejemplo

A veces no desea que su función sea accesible / almacenada como una variable. Puede crear una Expresión de función invocada inmediatamente (IIFE para abreviar). Estas son esencialmente funciones anónimas autoejecutables . Tienen acceso al ámbito circundante, pero la función en sí y cualquier variable interna serán inaccesibles desde el exterior. Una cosa importante a tener en cuenta sobre el IIFE es que incluso si nombra su función, el IIFE no se eleva como lo son las funciones estándar y no puede llamarse por el nombre de la función con la que están declarados.

(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");
}());

Esta es otra forma de escribir IIFE. Observe que el paréntesis de cierre antes del punto y coma se movió y se colocó justo después del soporte de cierre:

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

Puede pasar fácilmente parámetros en un IIFE:

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

Además, puede devolver valores al ámbito circundante:

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

Si es necesario, es posible nombrar un IIFE. Aunque se ve con menos frecuencia, este patrón tiene varias ventajas, como proporcionar una referencia que se puede usar para una recursión y puede hacer que la depuración sea más sencilla a medida que el nombre se incluye en la pila de llamadas.

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

Aunque ajustar una función entre paréntesis es la forma más común de indicar al analizador de Javascript esperar una expresión, en lugares donde ya se espera una expresión, la notación se puede hacer más concisa:

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

Versión de flecha de la función invocada de inmediato:

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