En JavaScript, un "closure" es una característica que permite a una función acceder al ámbito de una función exterior, incluso después de que esa función exterior haya terminado de ejecutarse. Esencialmente, un closure combina una función y el entorno en el que fue creada.
function crearContador() {
let contador = 0;
return function() {
contador++;
console.log(contador);
};
}
const miContador = crearContador();
miContador(); // Imprime 1
miContador(); // Imprime 2
miContador(); // Imprime 3
En este ejemplo, crearContador
es una función que define una variable
y luego retorna una nueva función anónima. La función anónima incrementa e imprime el valor de contador.
contador
La clave aquí es que
es una referencia a la función interna anónima, y esta función tiene acceso al entorno en el que fue creada, específicamente a la variable miContador
de contador
. Este acceso persiste incluso después de que crearContador haya terminado de ejecutarse, permitiendo que la variable contador sea incrementada cada vez que se llama a miContador.
crearContador
Este comportamiento es posible gracias a los closures. En resumen, un closure permite que una función "recuerde" y acceda a su ámbito léxico, es decir, al entorno donde fue declarada originalmente, incluso cuando se invoca fuera de ese entorno.
Jorge García
Fullstack developer