So bestehst du das JavaScript-Vorstellungsgespräch: Top-Fragen
Ein Vorstellungsgespräch für eine Position als JavaScript-Entwickler testet nicht nur die Syntax, sondern auch das tiefe Verständnis dafür, wie die Sprache funktioniert. Dies gilt insbesondere für Node.js, wo Asynchronität und Fehlerbehandlung im Vordergrund stehen. In diesem Artikel haben wir die Top-10-Fragen zusammengestellt, die am häufigsten in Vorstellungsgesprächen für Junior- und Middle-Entwickler gestellt werden. Jede Frage wird von einem Codebeispiel und einer Erklärung begleitet.
1. Was ist ein Closure und wo wird es angewendet?
Ein Closure ist eine Funktion, die sich an ihren lexikalischen Gültigkeitsbereich „erinnert“, selbst nachdem die äußere Funktion ihre Ausführung beendet hat. Dies ist eines der Schlüsselkonzepte von JavaScript.
Beispiel:
function createCounter() { let count = 0; return function() { count++; return count; };}
const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2Wo wird es angewendet? In Modulen, Funktionsfabriken, Memoization, Event-Handlern und bei der Arbeit mit Closures in Schleifen (z. B. in setTimeout).
2. Wie funktioniert die Event Loop in Node.js?
Die Event Loop ist ein Mechanismus, der es Node.js ermöglicht, nicht-blockierende Operationen auszuführen, trotz der Einzelthread-Architektur. Sie besteht aus mehreren Phasen: timers, poll, check und close callbacks.
Beispiel mit Microtasks:
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
// Ausgabe: 1, 4, 3, 2Warum ist das so? Microtasks (Promise) werden sofort nach dem aktuellen Stack und vor der nächsten Phase der Event Loop ausgeführt.
3. Unterschied zwischen == und ===
Der Operator == vergleicht Werte mit Typumwandlung, während === ohne Typumwandlung vergleicht (strikte Gleichheit).
console.log(5 == '5'); // true (Umwandlung des Strings in eine Zahl)console.log(5 === '5'); // false (unterschiedliche Typen)console.log(null == undefined); // trueconsole.log(null === undefined); // falseIn Vorstellungsgesprächen wird oft gefragt, warum [] == false true ergibt (aufgrund des abstrakten Vergleichs mit einem primitiven Wert).
4. Was ist prototypische Vererbung?
In JavaScript können Objekte Eigenschaften von anderen Objekten über die Prototyp-Kette erben. Jedes Objekt hat eine interne Eigenschaft [[Prototype]], auf die über __proto__ oder Object.getPrototypeOf() zugegriffen werden kann.
Beispiel:
const animal = { eats: true };const rabbit = { jumps: true };
rabbit.__proto__ = animal;
console.log(rabbit.eats); // true (geerbt)console.log(rabbit.jumps); // trueDie moderne Methode ist die Verwendung von Object.create() oder Klassen (syntaktischer Zucker über Prototypen).
5. Wie funktioniert this in JavaScript?
Der Wert von this wird durch den Aufrufkontext der Funktion bestimmt. Die grundlegenden Regeln:
- Im globalen Kontext (im Browser) —
window, in Node.js —global. - In einer Methode eines Objekts — das Objekt selbst.
- In einer Pfeilfunktion — lexikalisches
this(aus der äußeren Funktion). - Bei Aufruf mit
call/apply/bind— explizit übergebener Kontext.
Beispiel:
const obj = { name: 'Alice', greet: function() { console.log(this.name); }};
obj.greet(); // Alice
const greet = obj.greet;greet(); // undefined (Kontextverlust)
const boundGreet = obj.greet.bind({ name: 'Bob' });boundGreet(); // Bob