Presentando su atención es una traducción de un artículo de Parathan Thiyagalingam publicado en medium.freecodecamp.org. ¿Quieres saber cómo funcionan los cierres de JavaScript? ¡Mira debajo del gato!
 Foto Austin Distel con Unsplash
Foto Austin Distel con UnsplashUn cierre es una combinación de todas las variables en el alcance en el momento en que se crea la función. Para usar el cierre, debe crear una función anidada, es decir, una función dentro de la función. La función interna tendrá acceso a variables en el ámbito de la función externa incluso después de que la función externa se complete. (Es el 
cierre el que proporciona este acceso). Cada vez que se crea una función, se crea el cierre.
Antes de comenzar a comprender el concepto de cierres, considere cuáles son las cadenas de alcance en JavaScript. 
Como regla, hay dos tipos de áreas de visibilidad: global y local.
En JavaScript, una variable dentro de una función no es accesible externamente, a diferencia de, por ejemplo, las variables dentro de un bloque (en condiciones como 
if y 
while ).
En base a esto, una función en JavaScript tiene un alcance, pero un bloque no.
 var a = 10; function app(){ var b = 2; console.log(a);  
Como ya sabemos, 
a es una variable global 
yb es local, es decir, solo la utiliza la función de la 
app . Fuera del ámbito local, no tenemos acceso a la variable local.
Cómo usar una función anidada (función dentro de una función)
 var a = 10; function app(){ var b = 2; var d = 3; function add(){ var c = a + b; } return add; } var x = app(); console.dir(x); 
En el ejemplo anterior, la 
app es la función principal, 
add es la función secundaria.
- En lugar de console.log, console.dir se usa para mostrar todas las propiedades del objeto seleccionado.
- La variable x se asigna a la función de la app, que luego devuelve la función deadd. Esto le permite ver todas las propiedades del objeto de la función deadd.
Si abre la consola en un navegador, encontrará el objeto 
Closure dentro de la matriz de datos 
Scopes .

Como la función interna 
add tiene acceso a las variables 
byd que pertenecen a la función externa, estas dos variables se agregarán al objeto 
Closure como referencia.
Considere otro ejemplo de cierre.
 var a = 10; var startFunc; function app(){ var b = 2; function add(){ var c = a + b; console.log(c); } startFunc = add(); } app();  
- A la función global startFuncasigna la función deadd, que es un elemento secundario de laappfunción principal.
- Esto es posible solo después de llamar a la función de la aplicación. De lo contrario, la función startFuncse comportará como una variable global sin un valor asignado.
Cómo usar cierres en JavaScript
Muchos de nosotros, al usar cierres al escribir código, no entendemos completamente por qué lo hacen. JavaScript carece de los modificadores 
públicos , 
protegidos y 
privados que se encuentran en los lenguajes de programación orientados a objetos. Por lo tanto, para bloquear el acceso al espacio de nombres para el código externo, nos vemos obligados a recurrir a la ayuda de funciones.
Y como estamos hablando de funciones, la 
función llamada inmediatamente (IIFE) comienza inmediatamente después del anuncio. Ella ni siquiera necesita ser llamada.
La sintaxis IIFE se ve así:
 (function(){  
Considere este ejemplo:
 var studnetEnrollment = (function () {  
count y 
prefix son dos variables privadas que no se pueden cambiar. El acceso a ellos está abierto solo para la función interna (en nuestro caso, esta es la función 
innerFunc ).
- La primera vez que se llama a la función studentEnrollment, la funciónstudentEnrollmentaumenta el valor de la variablecounta 1.
- La segunda vez, el countaumenta de 1 a 2.
- Todo esto es posible solo a través del cierre.
Conclusión
Un cierre es un conjunto de variables de una función externa, debido a que el alcance de la función interna obtiene acceso a estas variables. Esto protege el espacio de nombres global.
La funcionalidad de cierre permite a los desarrolladores escribir código limpio, como en lenguajes de programación orientados a objetos, código en el que las variables globales y locales no se confunden.
Que tengas una buena codificación!