Cómo aprobar una entrevista de JavaScript: preguntas principales
Una entrevista para un puesto de desarrollador de JavaScript (especialmente con enfoque en Node.js) no es solo una verificación de sintaxis. Los empleadores quieren ver una comprensión profunda de la asincronía, los ámbitos de visibilidad y el funcionamiento del Event Loop. En este artículo hemos recopilado las preguntas principales que realmente se hacen en las entrevistas, con ejemplos de código y explicaciones.
1. Closures — la base del JS funcional
Pregunta: "¿Qué es un closure y cómo funciona en Node.js?"
Un closure es una función que "recuerda" su entorno léxico incluso después de que la función externa haya terminado de ejecutarse. Este es un mecanismo clave para la encapsulación de datos en JavaScript.
function createCounter() { let count = 0; return function() { count++; return count; };}
const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2Por qué preguntan esto: Los closures son la base de los módulos, las fábricas de funciones y los manejadores de eventos en Node.js. Sin comprender los closures, es imposible trabajar con callbacks asíncronos.
2. Event Loop y asincronía (Async/Await, Promises)
Pregunta: "Explique cómo funciona el Event Loop. ¿Qué mostrará este código?"
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');Respuesta: 1, 4, 3, 2. Primero el código síncrono, luego las microtareas (Promise.then), luego las macrotareas (setTimeout).
El Event Loop es el mecanismo que permite a Node.js ejecutar operaciones no bloqueantes, a pesar de ser de un solo hilo. Consta de varias fases:
- Timers — ejecuta los callbacks de setTimeout/setInterval
- I/O callbacks — procesa las operaciones de entrada/salida completadas
- Poll (encuesta) — obtiene nuevos eventos de I/O
- Check — ejecuta setImmediate()
- Close callbacks — cierra conexiones
Consejo: En la entrevista, demuestre comprensión de la diferencia entre process.nextTick() y setImmediate(). nextTick se ejecuta antes de la siguiente fase del Event Loop, mientras que setImmediate se ejecuta en la fase Check.
3. Contexto de llamada (this) y funciones flecha
Pregunta: "¿A qué equivale this en diferentes situaciones? ¿Cómo cambiar el contexto?"
El valor de this se determina por cómo se llama a la función, no por dónde se declara. En Node.js (modo estricto), en una función normal this será undefined, mientras que en el navegador será window.
const obj = { name: 'Node.js', regularFunc: function() { console.log(this.name); }, arrowFunc: () => { console.log(this.name); }};
obj.regularFunc(); // 'Node.js'obj.arrowFunc(); // undefined (this se toma del contexto externo)Cómo gestionar el contexto:
call(thisArg, arg1, arg2)— llama a la función con el this y argumentos especificadosapply(thisArg, [args])— similar, pero los argumentos se pasan como un arraybind(thisArg)— crea una nueva función con el this vinculado- Funciones flecha — no tienen su propio this, usan el contexto léxico
4. Prototipos y herencia (Prototype Chain)
Pregunta: "¿Cómo funciona la herencia prototípica en JavaScript? ¿En qué se diferencia de las clases?"
JavaScript utiliza herencia prototípica: cada objeto tiene una referencia interna [[Prototype]] (accesible a través de __proto__ o Object.getPrototypeOf()).
function Animal(name) { this.name = name;}
Animal