Un cierre o closure en JavaScript es una función que tiene acceso al alcance de una función padre, incluso después de que la función padre se haya cerrado.
Los cierres son creados cada vez que una función se crea, en tiempo de creación de la función.
Permiten que las funciones anidadas accedan a las variables de las funciones superiores. Los cierres permiten manejar la asincronía en JavaScript, controlar el acceso y protección de datos y pueden ser usados para la creación de constructuras de datos o emulación de lo que sería un concepto de clases y atributos privados en la programación orientada a objetos.
Aquí hay un simple ejemplo de un cierre:
```javascript
function saludo(nombre) {
return function () {
console.log(‘Hola ‘ + nombre);
}
}
let saludoJuan = saludo(‘Juan’);
saludoJuan(); // Muestra ‘Hola Juan’ en la consola
```
En este caso, el cierre es la función anónima que se devuelve desde la función `saludo`. Esta función anónima tiene acceso al parámetro `nombre` de la función `saludo`, aunque `saludo` haya terminado de ejecutarse.