jueves, 15 de octubre de 2020

Javascript: Ejemplo de Closure

Ejemplo

function inicial() {
    // var1 definida e inicializada para el scope de inicial()
    let var1 = 1;        

    function interna() {
        // var2 definida e inicializada para el scope de interna()
        let var2 = 2;    
        console.log( var1, var2 );
    }

    // inicial() retorna función. !OJO¡ totalmente distinto a
    // 'return interna()' que devolvería el retorno de interna()
    return interna;      
}

// a externa le asignamos el retorno de inicial(), que es
// la referencia a la función interna
let externa = inicial();             

// Resulta en consola 1 2 -- Accede al contenido de variables que
// están fuera de su scope.
// Estamos ante una !!!CLOSURE!!!, bueno dos: var1 y var2
externa();

Definición

Se produce una Closure cuando una función es capaz de recordar y acceder a su lexical scope mientras se ejecuta fuera de él.

Explicación

En este ejemplo a la variable externa se le asigna la función inicial(). Esta función declara dentro de su scope las variables var1 y var2.
 
Cuando en la última línea de código se ejecuta externa(), realmente la función que se está ejecutando es interna() que es el retorno de ejecutar inicial() en la sentencia let externa = inicial();. Esta  función interna() al ejecutarse hace uso de variables que están definidas e inicializadas en el scope de inicial() , pero se está ejecutando desde fuera del scope de inicial(). Esto es la closure.

Conclusión

Gracias a las closures, hay variables que pueden se usadas fuera de su scope. Eso sí, protegidas y manejadas por las funciones dentro de las que están declaradas. 

Bibliografía

'You Don't Know JS: Scope & Closures' de Kyle Simpson publicado por 'Reilly Media, Inc en Marzo 2014

No hay comentarios:

Publicar un comentario