Comment réussir un entretien JavaScript : niveau avancé

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment réussir un entretien JavaScript : les questions avancées incontournables

\n\n

Un entretien pour un poste de développeur Senior JavaScript ou d'ingénieur Node.js ne se limite pas à une simple vérification de la syntaxe. Les recruteurs veulent voir une compréhension approfondie du langage : comment fonctionne l'Event Loop, ce qu'est réellement le contexte this, et comment éviter les "callback hell" lors du travail avec l'asynchrone. Dans cet article, nous analyserons les questions les plus fréquentes et les plus piégeuses posées au niveau avancé. Préparez-vous non seulement à lire les réponses, mais à comprendre la mécanique sous-jacente.

\n\n

1. Event Loop, pile d'appels et microtasks (Microtasks vs Macrotasks)

\n\n

C'est sans doute le bloc le plus populaire lors des entretiens Node.js. La question est : "Qu'affiche ce code et dans quel ordre ?".

\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

Réponse correcte : 1, 5, 4, 3, 2.

\n\n

Analyse :

\n
    \n
  • Code synchrone (1, 5) est exécuté en premier.
  • \n
  • process.nextTick() est une microtask de la plus haute priorité. Elle est exécutée immédiatement après l'opération en cours, mais AVANT toute autre microtask (Promise) et macrotask (setTimeout).
  • \n
  • Promise.then() est également une microtask, mais sa priorité est inférieure à celle de nextTick.
  • \n
  • setTimeout(cb, 0) est une macrotask. Elle n'est exécutée qu'après que la pile d'appels et toutes les microtasks (tous les nextTick et Promise) soient complètement vidées.
  • \n
\n\n

Comment répondre correctement : Expliquez que Node.js a des phases d'Event Loop. Les microtasks (process.nextTick et Promise) sont traitées entre les phases. Les macrotasks (setTimeout, setInterval, I/O) sont à l'intérieur des phases. nextTick est une file d'attente non standard mais très importante qui peut bloquer l'Event Loop si elle est utilisée de manière récursive.

\n\n

2. Le contexte this et sa "perte"

\n\n

Question : "Comment fonctionne this en JavaScript ? Donnez un exemple où this est perdu et comment le corriger".

\n\n

Le niveau avancé implique que vous connaissiez les 4 règles :

\n
    \n
  1. Nouvelle liaison (new binding) — lors de l'appel d'une fonction avec new, this pointe vers le nouvel objet créé.
  2. \n
  3. Liaison explicite — call, apply, bind.
  4. \n
  5. Liaison implicite — lorsque la fonction est appelée comme méthode d'un objet (obj.method()).
  6. \n
  7. Par défaut — l'objet global (global dans Node.js, window dans le navigateur) ou undefined en mode strict.
  8. \n
\n\n

Exemple de perte de contexte :

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

Pourquoi ? Nous avons assigné la méthode à une variable. Maintenant, greetFn() est appelée sans le contexte de l'objet (user). this est lié à l'objet global (ou undefined en mode strict).

\n\n

Comment corriger :

\n
    \n
  • Utiliser bind : const greetFn = user.greet.bind(user);
  • \n
  • Utiliser une fonction fléchée (elle n'a pas son propre this, mais le prend du contexte lexical externe).
  • \n
  • Appeler via call/apply : greetFn.call(user).
  • \n
\n\n

Question bonus : "Et que se passe-t-il si on passe user.greet à setTimeout ?" — Le même effet de perte. On corrige avec bind ou une fonction fléchée dans le callback.

\n\n

3. Les closures

Blogs

Book Recommendations