P
prepair.app
Comenzar entrevista →
EnglishУкраїнськаРусскийDeutsch
🟨

Middle JavaScriptPreguntas de entrevista JavaScript

Middle · 2–4 años de experiencia

Las entrevistas de JavaScript se concentran en un pequeño número de cosas que el lenguaje hace distinto a todo lo demás: closures, `this`, prototipos y el event loop. Entiende eso bien y la mayoría de las otras preguntas se resuelven solas. Aquí están las más frecuentes, cada una con una respuesta modelo. Middle: comprensión más profunda, optimización y situaciones reales de trabajo.

Pruébalo — sin cuenta necesaria
Preparando tu pregunta…

Temas para prepararte

Tipos y coerción
Closures y scope
`this` y prototipos
El event loop y async
Promises y async/await
DOM, eventos y el navegador

6 preguntas de nivel Middle con respuestas

1

Da un uso práctico de un closure, y el bug clásico.

Respuesta

Práctico: un contador o un caché donde el estado no debe ser alcanzable desde afuera, una función factory, o cualquier cosa que tenga que recordar un valor entre llamadas. El bug clásico es for (var i = 0; ...) setTimeout(() => console.log(i)) imprimiendo el valor final cada vez, porque todos los callbacks cierran sobre un solo binding. let crea un binding nuevo por iteración y lo arregla.

2

¿Cómo se determina `this`, y qué lo rompe?

Respuesta

Cuatro reglas, en orden de precedencia: new, luego call/apply/bind explícitos, luego una llamada de método donde this es el objeto antes del punto, luego el default — undefined en modo estricto. Se rompe cuando un método se pasa como callback, porque el punto ya no está cuando se llama. Las soluciones son bind en el punto de pasarlo, un wrapper con arrow function, o definir el método como campo de clase.

3

¿Cuál es la diferencia entre una `class` y una función constructora?

Respuesta

Casi ninguna en runtime — class es sintaxis sobre el mismo mecanismo de prototipos. Las diferencias que importan: los cuerpos de clase siempre están en modo estricto, las declaraciones de clase no se hoistean para su uso, los métodos son no enumerables, y llamar a una clase sin new lanza un error en lugar de hacer silenciosamente algo incorrecto. extends y super son genuinamente más fáciles que cablear prototipos a mano.

4

¿Cuál es el orden de salida aquí, y por qué?

Respuesta

Dados un setTimeout(fn, 0) y un Promise.then resuelto programados en el mismo tick, el callback de la promise corre primero. La razón es que después de que el script actual termina, el motor vacía toda la cola de microtasks antes de tomar una sola macrotask de la cola del timer. De ahí se sigue que una microtask que programa otra microtask puede bloquear el renderizado indefinidamente, mientras que un setTimeout no puede.

5

¿Cómo corres trabajo asíncrono en paralelo en vez de en secuencia?

Respuesta

await dentro de un loop es secuencial — cada iteración espera a la anterior. Para correr en paralelo, inicias todas las promises primero y luego las esperas juntas con Promise.all. Usa allSettled cuando un fallo parcial es aceptable, race para un timeout, any para el primer éxito. Equivocarse en esto convierte un request de 200 ms en 20 requests de 200 ms cada uno.

6

¿Qué causa fugas de memoria en el navegador y cómo las encuentras?

Respuesta

Nodos del DOM desconectados pero aún referenciados por JavaScript, listeners nunca eliminados, timers nunca limpiados, y closures que retienen objetos grandes — más cachés que solo crecen. Las encuentras tomando heap snapshots en DevTools antes y después de una acción repetida y comparando qué sobrevivió. WeakMap y WeakSet retienen claves débilmente, que es por qué son la estructura correcta para asociar datos a nodos del DOM.

🦎

Leer respuestas no es suficiente

En una entrevista real hablas bajo presión. Cam hace estas mismas preguntas, evalúa cada respuesta y muestra exactamente qué mejorar.

Practicar entrevista de Middle JavaScript →
Gratis · 3 entrevistas al mes

Otros niveles — JavaScript

Junior JavaScriptSenior JavaScriptTodas las preguntas de JavaScript

Otras especializaciones

🔍Middle Manual QA🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend🟢Middle Node.js Backend💎Middle Ruby on Rails🔷Middle C++⚛️Middle React Frontend