¿Qué es un closure en JavaScript y qué registra esto?
function counter() {
let n = 0;
return () => ++n;
}
const c = counter();
c(); c();
console.log(c());Opciones
- 3: la función interna recuerda su
nexterior (Opción correcta) - 0: cada llamada empieza de nuevo desde cero
- undefined:
nno es visible fuera - 1: solo la primera llamada cambia el valor de n
Respuesta
3: la función interna recuerda n de donde se creó
Por qué
Un closure es una función que conserva acceso a las variables del scope donde se creó, incluso después de que termine la función exterior.
counter() devuelve una arrow function que sigue viendo su n privado. Cada llamada incrementa la misma variable: 1, 2 y luego 3. Ningún código externo puede tocar n directamente (privacidad de datos).
Los closures hacen posibles los callbacks, los manejadores de eventos y los hooks de React.
Recuerda
Closure = función + variables recordadas.