Cierres en JavaScript
En JavaScript, la función es un bloque de código que está diseñado para realizar una tarea específica. Se ejecuta cuando lo invocas.
Por ejemplo:
function myFunction(message){
console.log(message)
}
myFunction("Hello there!!")
myFunction("Welcome, boss")
Pero, ¿y si queremos saber qué sucedió en la primera ejecución o en la anterior? Ahí es donde vienen los cierres.
¿Qué es Cierres?
En palabras simples, cuando una función devuelve otra función, que tiene acceso al alcance de sus funciones externas, se denomina cierre en JavaScript.
Por ejemplo:
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
function inner (){
counter++;
return counter;
}
Entonces, de alguna manera, JavaScript recuerda el countervalor anterior y lo está haciendo una operación matemática.
Podrías preguntar cómo Js está haciendo eso.
Cuando una función devuelve una función, no devuelve solo la función, también devuelve el alcance léxico de esa función. Todos esos datos variables que están relacionados con esa función devuelta como una propiedad oculta junto con esa función devuelta. Esa propiedad oculta también llamadaBackpack
Esta mochila tiene muchos nombres:
- Cerrado sobre 'Entorno variable' (COVE)
- Datos de referencia de ámbito léxico persistente (PLSRD)
- Mochila
- Cierre
Veamos otro ejemplo:
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
result() // 1
result() // 2
const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2
Por qué cierres:
- Nos ayuda a crear una función de ayuda que permite funciones poderosas como una vez y memorizar.
- Nos ayuda a crear Iteradores y Generadores utilizando el alcance léxico y los cierres.
- Muchos patrones de diseño de JavaScript, incluido el patrón de módulo, usan el cierre, al preservar el estado de una aplicación sin contaminar el espacio de nombres global.
- Las devoluciones de llamada y las promesas dependen de los cierres para persistir en el estado en el mundo de JavaScript asíncrono.

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































