Comment se préparer à un entretien JavaScript : guide complet
\n\nUn entretien JavaScript n’est pas un examen scolaire où il suffit d’apprendre les réponses par cœur. C’est une conversation où l’on teste non seulement vos connaissances de la syntaxe, mais aussi votre capacité à réfléchir, à comprendre les mécanismes du langage et à résoudre des problèmes concrets. Si vous sentez que vous « flottez » sur les fermetures, que vous confondez this et que vous redoutez l’event loop — ne vous inquiétez pas. Nous avons préparé un guide structuré qui vous aidera à passer votre entretien JavaScript avec confiance.
Pourquoi est-il si difficile de se préparer à un entretien JS ?
\n\nJavaScript est un langage avec une âme (et parfois des surprises). Une même fonction peut se comporter différemment selon le contexte. C’est pourquoi, lors d’un entretien JavaScript, on ne vous demande pas simplement « qu’affiche ce code » — on vous demande d’expliquer pourquoi. Et c’est là que beaucoup échouent. Mais nous allons vous apprendre à repérer ces pièges.
\n\n1. Les bases à connaître par cœur
\n\nTypes de données et conversion de types
\n\nCommençons par les bases. JavaScript a 7 types primitifs : string, number, boolean, null, undefined, symbol, bigint — et un type complexe : object. Mais l’astuce est que typeof null retourne "object" — c’est une erreur historique qu’il faut connaître.
Lors d’un entretien JavaScript, on aime poser des questions sur la conversion implicite de types. Par exemple :
\n\nconsole.log([] + []); // ""\nconsole.log([] + {}); // "[object Object]"\nconsole.log({} + []); // 0 (dans la console du navigateur)\n\n\nPourquoi cela ? Parce que l’opérateur + tente de convertir les opérandes en primitifs, en appelant toString() ou valueOf(). Souvenez-vous : un tableau vide se transforme en chaîne vide, et un objet en chaîne "[object Object]".
Fermetures et environnement lexical
\n\nC’est l’un des sujets les plus fréquents lors d’un entretien JavaScript. Une fermeture est une fonction qui « se souvient » des variables de sa portée externe même après que la fonction externe a terminé son exécution.
\n\nfunction createCounter() {\n let count = 0;\n return function() {\n count++;\n return count;\n };\n}\n\nconst counter = createCounter();\nconsole.log(counter()); // 1\nconsole.log(counter()); // 2\n\nLors d’un entretien, on peut vous demander d’écrire une fonction similaire ou d’expliquer pourquoi, dans une boucle avec var, le problème classique apparaît :
for (var i = 0; i < 5; i++) {\n setTimeout(() => console.log(i), 1000);\n}\n// Affiche 5, 5, 5, 5, 5\n\nLa solution — utiliser let ou encapsuler dans une fermeture. Expliquez impérativement que var a une portée fonctionnelle, et non bloc.
2. « This » — la douleur et la joie de tout développeur JS
\n\nLes questions sur this sont un grand classique. La règle est simple : la valeur de this est déterminée par la manière dont la fonction est appelée, et non par l’endroit où elle est déclarée.
- \n
- Dans le contexte global (dans le navigateur),
thisestwindow. \n - Dans une méthode d’objet — l’objet lui-même. \n
- Dans une fonction constructeur — une nouvelle instance. \n
- Dans une fonction fléchée —
thisde l’environnement lexical externe. \n
Exemple pour un entretien :
\n\nconst obj = {\n name: "JS",\n getName: function() {\n return this.name;\n }\n};\n\nconst fn = obj.getName;\nconsole.log(fn()); // undefined (contexte perdu)\n\nComment corriger ? Utiliser bind, call, apply ou une fonction fléchée.
3. Event Loop et asynchronicité — un sujet pour les experts
\n\nSans comprendre l’event loop, vous ne passerez pas un entretien JavaScript de niveau intermédiaire. Souvenez-vous de la séquence : d’abord, tout le code synchrone est exécuté (pi