Expresiones de función invocadas inmediatamente (IIFEs)

En el codigo anterior, ninguna de las expresiones de las funciones son ejecutadas -- podriamos ejecutarlas si hubieramos incluido foo() or x(), por ejemplo.

Hay otra manera de ejecutar la expresion de una funcion, que es generalmente conocida como una expresion de funcion invocada inmediatamente (IIFE)

(function IIFE(){
    console.log( "Hola!" );
})();
// "Hola!"

Las parentecis ( .. ) que envuelven la expresion de la funcion (function IIFE(){ .. }) son tan solo un matiz de la gramatica de Javascript necesaria para prevenir que esta sea tratada como una declaracion de una funcion normal.

Los parentesis () al final de la expresion -- en la linea })(), es lo que realmente ejecuta la expresion de la funcion referenciada que esta antes de ella.

Esto tal vez sea extraño, pero no es tan extraño a primera vista. Considere las similitudes entre foo y IIFE:

function foo() { .. }

// `foo` funcion que referencia la expresion
// entonces `()` la ejecuta
foo();

// `IIFE` exprecion de la funcion,
// entonces `()` la ejecuta
(function IIFE(){ .. })();

Como puede ver, listar (function IIFE(){ .. }) antes de ejecutar () es escencialmente lo mismo que incluir foo antes de su ejecucion (); en ambos casos, la funcion referenciada es ejecutada con los() que estan inmediatamente despues de la funcion.

Ya que la IIFE es tan solo una funcion, y las funciones crean ambitos en las variables, utilizar una IIFE de esta manera es a menudo usado para declarar varaibles que no afecta el codigo externo que envuelve la IIFE:

var a = 42;

(function IIFE(){
    var a = 10;
    console.log( a );    // 10
})();

console.log( a );        // 42

IIFE tambien pueden retornar valores;:

var x = (function IIFE(){
    return 42;
})();

x;    // 42

El valor 42 retornado de la funcion IIFE-nombrada que esta siendo ejecutada y es entonces asignada a x.

results matching ""

    No results matching ""