Wie man ein JavaScript-Vorstellungsgespräch besteht: Fortgeschrittenes Niveau

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wie man ein JavaScript-Vorstellungsgespräch besteht: Top-Fragen für Fortgeschrittene

\n\n

Ein Vorstellungsgespräch für eine Position als Senior JavaScript-Entwickler oder Node.js-Ingenieur ist nicht nur eine Überprüfung der Syntax. Interviewer möchten ein tiefes Verständnis der Sprache sehen: wie der Event Loop funktioniert, was der Kontext this wirklich bedeutet und wie man die "höllische" Verschachtelung bei der Arbeit mit Asynchronität vermeidet. In diesem Artikel analysieren wir die häufigsten und kniffligsten Fragen, die auf fortgeschrittenem Niveau gestellt werden. Machen Sie sich bereit, nicht nur Antworten zu lesen, sondern die Mechanik zu verstehen.

\n\n

1. Event Loop, Aufrufstapel und Mikrotasks (Microtasks vs Macrotasks)

\n\n

Dies ist wohl der beliebteste Block in Node.js-Vorstellungsgesprächen. Die Frage lautet: "Was gibt dieser Code aus und in welcher Reihenfolge?".

\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

Richtige Antwort: 1, 5, 4, 3, 2.

\n\n

Analyse:

\n
    \n
  • Synchroner Code (1, 5) wird zuerst ausgeführt.
  • \n
  • process.nextTick() ist ein Mikrotask mit der höchsten Priorität. Er wird unmittelbar nach der aktuellen Operation ausgeführt, aber VOR allen anderen Mikrotasks (Promise) und Makrotasks (setTimeout).
  • \n
  • Promise.then() ist ebenfalls ein Mikrotask, aber seine Priorität ist niedriger als die von nextTick.
  • \n
  • setTimeout(cb, 0) ist ein Makrotask. Er wird erst ausgeführt, nachdem der Aufrufstapel und alle Mikrotasks (alle nextTick und Promise) vollständig abgearbeitet sind.
  • \n
\n\n

Wie man richtig antwortet: Erklären Sie, dass Node.js Phasen des Event Loops hat. Mikrotasks (process.nextTick und Promise) werden zwischen den Phasen verarbeitet. Makrotasks (setTimeout, setInterval, I/O) werden innerhalb der Phasen verarbeitet. nextTick ist eine nicht standardmäßige, aber sehr wichtige Warteschlange, die den Event Loop blockieren kann, wenn sie rekursiv verwendet wird.

\n\n

2. Der Kontext this und sein "Verlust"

\n\n

Frage: "Wie funktioniert this in JavaScript? Geben Sie ein Beispiel, wo this verloren geht, und wie man das behebt".

\n\n

Das fortgeschrittene Niveau setzt voraus, dass Sie die 4 Regeln kennen:

\n
    \n
  1. Neue Bindung (new binding) — beim Aufruf einer Funktion mit new zeigt this auf das neu erstellte Objekt.
  2. \n
  3. Explizite Bindung — call, apply, bind.
  4. \n
  5. Implizite Bindung — wenn eine Funktion als Methode eines Objekts aufgerufen wird (obj.method()).
  6. \n
  7. Standardmäßig — das globale Objekt (global in Node.js, window im Browser) oder undefined im strikten Modus.
  8. \n
\n\n

Beispiel für Kontextverlust:

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

Warum? Wir haben die Methode einer Variablen zugewiesen. Jetzt wird greetFn() ohne den Kontext des Objekts (user) aufgerufen. this wird an das globale Objekt gebunden (oder undefined im strict mode).

\n\n

Wie man es behebt:

\n
    \n
  • bind verwenden: const greetFn = user.greet.bind(user);
  • \n
  • Eine Pfeilfunktion verwenden (sie hat kein eigenes this, sondern nimmt es aus der äußeren lexikalischen Umgebung).
  • \n
  • Über call/apply aufrufen: greetFn.call(user).
  • \n
\n\n

Bonusfrage: "Was passiert, wenn user.greet an setTimeout übergeben wird?" — Derselbe Effekt des Kontextverlusts. Behebung durch bind oder eine Pfeilfunktion im Callback.

\n\n

3. Closures

Blogs

Buchempfehlungen