Ejemplo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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