Cómo aprobar una entrevista de JavaScript: nivel avanzado

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo aprobar una entrevista de JavaScript: las mejores preguntas de nivel avanzado

\n\n

Una entrevista para un puesto de desarrollador Senior JavaScript o ingeniero Node.js no es solo una verificación de sintaxis. Los entrevistadores quieren ver una comprensión profunda del lenguaje: cómo funciona el Event Loop, qué es realmente el contexto this y cómo evitar el "infierno" de anidamiento al trabajar con asincronía. En este artículo, analizaremos las preguntas más frecuentes y engañosas que se hacen en el nivel avanzado. Prepárate no solo para leer respuestas, sino para entender la mecánica.

\n\n

1. Event Loop, pila de llamadas y microtareas (Microtasks vs Macrotasks)

\n\n

Este es, probablemente, el bloque más popular en las entrevistas de Node.js. La pregunta es: "¿Qué muestra este código y en qué orden?".

\n\n
console.log('1');\n\nsetTimeout(() => console.log('2'), 0);\n\nPromise.resolve().then(() => console.log('3'));\n\nprocess.nextTick(() => console.log('4'));\n\nconsole.log('5');
\n\n

Respuesta correcta: 1, 5, 4, 3, 2.

\n\n

Análisis:

\n
    \n
  • Código síncrono (1, 5) se ejecuta primero.
  • \n
  • process.nextTick() es una microtarea de la más alta prioridad. Se ejecuta inmediatamente después de la operación actual, pero ANTES de cualquier otra microtarea (Promise) y macrotarea (setTimeout).
  • \n
  • Promise.then() también es una microtarea, pero su prioridad es menor que la de nextTick.
  • \n
  • setTimeout(cb, 0) es una macrotarea. Se ejecuta solo después de que la pila de llamadas y todas las microtareas (todos los nextTick y Promise) se hayan limpiado por completo.
  • \n
\n\n

Cómo responder correctamente: Explica que Node.js tiene fases de Event Loop. Las microtareas (process.nextTick y Promise) se procesan entre fases. Las macrotareas (setTimeout, setInterval, I/O) se procesan dentro de las fases. nextTick es una cola no estándar pero muy importante que puede bloquear el Event Loop si se usa de forma recursiva.

\n\n

2. Contexto this y su "pérdida"

\n\n

Pregunta: "¿Cómo funciona this en JavaScript? Da un ejemplo donde this se pierde y cómo solucionarlo".

\n\n

El nivel avanzado implica que conoces las 4 reglas:

\n
    \n
  1. Nuevo enlace (new binding) — al llamar a una función con new, this apunta al nuevo objeto creado.
  2. \n
  3. Enlace explícito — call, apply, bind.
  4. \n
  5. Enlace implícito — cuando la función se llama como método de un objeto (obj.method()).
  6. \n
  7. Por defecto — el objeto global (global en Node.js, window en el navegador) o undefined en modo estricto.
  8. \n
\n\n

Ejemplo de pérdida de contexto:

\n
const user = {\n  name: 'Alice',\n  greet() {\n    console.log(`Hello, ${this.name}`);\n  }\n};\n\nconst greetFn = user.greet;\ngreetFn(); // Hello, undefined
\n\n

¿Por qué? Asignamos el método a una variable. Ahora greetFn() se llama sin el contexto del objeto (user). this se vincula al objeto global (o undefined en modo estricto).

\n\n

Cómo solucionarlo:

\n
    \n
  • Usar bind: const greetFn = user.greet.bind(user);
  • \n
  • Usar una función flecha (no tiene su propio this, sino que lo toma del entorno léxico externo).
  • \n
  • Llamar con call/apply: greetFn.call(user).
  • \n
\n\n

Pregunta extra: "¿Qué pasaría si user.greet se pasa a setTimeout?" — El mismo efecto de pérdida. Se soluciona con bind o una función flecha en el callback.

\n\n

3. Closures

Blogs

Book Recommendations