Pregunta de entrevista para Desarrollador frontend

Explica la delegación de eventos y cuándo la usarías en vez de asignar listeners a cada elemento.

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

La delegación de eventos consiste en asignar un único listener a un ancestro común y usar event.target para averiguar con qué descendiente se ha interactuado. Funciona porque la mayoría de los eventos burbujean desde el objetivo hacia sus ancestros. Úsala para listas que cambian a menudo o que son grandes, porque te evitas asignar y limpiar cientos de listeners. No la uses para eventos que no burbujean, como focus, blur y la mayoría de eventos de media.

Por qué lo preguntan los entrevistadores

Es una comprobación rápida de si entiendes las fases de captura y burbujeo en vez de llamar a addEventListener de memoria. El entrevistador también sondea tu higiene de memoria: quien ha depurado listeners con fugas en una single page app sabe por qué importa la delegación. Las preguntas de seguimiento suelen ir hacia los eventos que no burbujean, el mal uso de stopPropagation y cómo los frameworks implementan su propia delegación sintética encima de esto.

Cómo estructurar tu respuesta

  • Defínela en una frase usando burbujeo y event.target.
  • Nombra la ganancia concreta: menos listeners y funciona con elementos añadidos después.
  • Señala las excepciones, incluidos los eventos que no burbujean.
  • Avisa de que stopPropagation rompe la delegación aguas arriba.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

En vez de poner un listener de clic en cada fila, pongo uno en el contenedor y leo event.target, y luego subo con closest para encontrar la fila que me interesa. Funciona porque el clic burbujea desde lo que se pulsó de verdad hacia sus ancestros, así que el contenedor ve todo lo que hay debajo. Las dos ganancias son que no estoy creando y destruyendo cientos de listeners, y que las filas añadidas después funcionan sin volver a enlazar nada. Las pegas merecen mención: focus y blur no burbujean, así que para eso uso focusin y focusout, y si algún código entre el objetivo y mi contenedor llama a stopPropagation mi manejador deja de dispararse en silencio, que es un bug genuinamente molesto de rastrear. Me pasó sobre todo en una tabla donde un componente interno detenía la propagación para cerrar su propio menú y mataba sin ruido la selección de filas. Hoy suelo tener delegación gratis desde el framework, pero la sigo usando directamente para listas virtualizadas grandes y para cualquier cosa renderizada fuera del árbol del framework.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Qué eventos comunes no burbujean y qué usas en su lugar?
  • ¿Cómo gestionarías un clic sobre un elemento anidado dentro de la fila?
  • ¿Cuándo es stopPropagation la decisión correcta y no un mal olor?

Más preguntas para Desarrollador frontend

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot