Desarrollador Frontend: pregunta de entrevista
¿Qué es un closure en JavaScript?
Un closure es una función junto con su entorno léxico. Conserva acceso a variables del scope donde se creó incluso después de que la función externa termine.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
Cada función en JavaScript captura las variables del ámbito donde se definió por referencia, no por valor. El binding capturado vive mientras vive el closure, así que una variable que sería recolectada sigue accesible, y un cambio posterior en ella es visible desde el closure. Es el mecanismo detrás de los módulos, la memoización, los handlers de eventos y de la mayoría de bugs con bucles y callbacks asíncronos.
Ejemplo
Un handler de clic puede cerrar sobre un id; cada handler necesita su propio binding para no usar por error un valor posterior del bucle. Con var en un for todos los handlers comparten un binding y leen el valor final; con let cada iteración crea un binding nuevo, así que el handler del tercer botón imprime 3 y no el final del bucle.
Errores frecuentes
- Creer que un closure copia el valor en el momento de crearse.
- Capturar un objeto grande en un callback de larga vida y provocar una fuga de memoria.
- Explicar closures sin mencionar que la función externa puede haber terminado ya.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.