So bestehst du das JavaScript-Vorstellungsgespräch: Top-Fragen von A bis Z
Ein Vorstellungsgespräch für eine Stelle als JavaScript-Entwickler ist nicht nur eine Überprüfung der Syntax. Arbeitgeber wollen ein tiefes Verständnis der Sprache, ihrer Besonderheiten und die Fähigkeit, mit Asynchronität zu arbeiten, sehen. In diesem Artikel analysieren wir die wichtigsten Themen, die dir helfen, das Interview souverän zu bestehen. Wir behandeln Fragen von grundlegenden Konzepten bis zu fortgeschrittenen Node.js-Themen mit echten Codebeispielen.
1. Grundlagen: Datentypen, Hoisting und Gültigkeitsbereiche
Beginnen wir mit den Fundamenten. JavaScript ist eine Sprache mit dynamischer Typisierung. Das Verständnis von var, let und const ist das absolute Minimum.
Frage: Was ist der Unterschied zwischen var und let bzw. const?
varhat einen funktionalen Gültigkeitsbereich und wird mit dem Wertundefinedgehoisted.letundconsthaben einen blockbezogenen Gültigkeitsbereich und werden bis zur Deklaration nicht initialisiert (Temporal Dead Zone).constverbietet eine Neuzuweisung, macht das Objekt aber nicht unveränderlich.
Beispiel für Hoisting:
console.log(a); // undefined (Hoisting)var a = 5;
console.log(b); // ReferenceError: Cannot access 'b' before initializationlet b = 10;Frage: Was ist „Hoisting“?
Dies ist ein Mechanismus, bei dem Deklarationen von Variablen und Funktionen vor der Codeausführung an den Anfang ihres Gültigkeitsbereichs verschoben werden. Über function deklarierte Funktionen werden vollständig gehoisted, Variablen hingegen nur die Deklaration, nicht die Initialisierung.
2. Closures und Kontext (this)
Closures sind eine der stärksten Seiten von JavaScript. Sie ermöglichen es einer Funktion, sich an die lexikalische Umgebung zu erinnern, in der sie erstellt wurde.
Frage: Was ist ein Closure? Nenne ein Beispiel.
Ein Closure ist eine Kombination aus einer Funktion und ihrer lexikalischen Umgebung. Mit anderen Worten: Eine innere Funktion hat Zugriff auf die Variablen der äußeren Funktion, auch nachdem die äußere ihre Ausführung beendet hat.
function createCounter() { let count = 0; return function() { count++; return count; };}
const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2Frage: Wie funktioniert this in JavaScript?
Der Wert von this wird dadurch bestimmt, wie die Funktion aufgerufen wird, nicht wo sie deklariert ist. Die grundlegenden Regeln:
- Im globalen Kontext (im Browser) —
window, in Node.js —global. - In einer Methode eines Objekts — das Objekt selbst.
- In einer Funktion, die mit
newaufgerufen wird — eine neue Instanz. - Bei Verwendung von
call,apply,bind— das übergebene Objekt. - In Pfeilfunktionen —
thiswird aus dem äußeren lexikalischen Kontext übernommen.
const obj = { name: 'Alice', greet() { console.log(this.name); }};
const greet = obj.greet;greet(); // undefined (Kontextverlust)
const boundGreet = obj.greet.bind(obj);boundGreet(); // Alice3. Asynchronität: Event Loop, Promises und async/await
JavaScript ist eine Single-Thread-Sprache, verarbeitet aber asynchrone Operationen dank des Event Loop effizient. Dies ist eines der beliebtesten Themen in Vorstellungsgesprächen.
Frage: Was ist der Event Loop und wie funktioniert er?
Der Event Loop ist eine Endlosschleife, die den Call Stack und die Aufgabenwarteschlangen (Task Queue / Microtask Queue) überwacht. Wenn der Stack leer ist, nimmt er die erste Aufgabe aus der Microtask-Queue (Promise, MutationObserver) oder der Macrotask-Queue (setTimeout, I/O).
Frage: Was ist der Unterschied zwischen Mikro- und Makrotasks?
- Mikrotasks: Promise.then/catch/finally,