¿Cómo funcionan los closures en JavaScript? Explica con ejemplos
¡Hola a todos! Acabo de empezar a aprender JavaScript y no logro entender el tema de los closures. He leído muchos artículos, pero aún me confundo.
Aquí hay un ejemplo que me desconcierta. Creo una función que devuelve otra función:
```javascript
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2
console.log(counter2()); // 1 — ¿por qué no 3?
```
¿Por qué `counter1` y `counter2` se comportan como contadores separados? Pensé que la variable `count` sería compartida. ¿Y cómo JavaScript "recuerda" el valor de `count` después de que la función `createCounter` ha terminado su ejecución? Normalmente, las variables locales se destruyen al salir de la función.
Explíquenme, por favor, el mecanismo de los closures en palabras simples. ¿Cómo almacenan referencias a las variables? ¿Y dónde puede ser útil esto en proyectos reales?