Comment réussir un entretien JavaScript : les meilleures questions de A à Z
\n\nUn entretien pour un poste de développeur JavaScript ne se limite pas à une vérification de la syntaxe. Les employeurs veulent voir une compréhension approfondie du langage, de ses particularités et la capacité à travailler avec l'asynchrone. Dans cet article, nous analyserons les sujets clés qui vous aideront à réussir votre entretien avec confiance. Nous aborderons les questions allant des concepts de base aux sujets avancés de Node.js avec des exemples de code réels.
\n\n1. Les bases : types de données, hoisting et portées
\n\nCommençons par les fondamentaux. JavaScript est un langage à typage dynamique. Comprendre var, let et const est le minimum obligatoire.
Question : Quelle est la différence entre var, let et const ?
- \n
vara une portée fonctionnelle et est remonté (hoisting) avec la valeurundefined. \n letetconstont une portée de bloc et ne sont pas initialisés avant la déclaration (Temporal Dead Zone). \n constinterdit la réaffectation, mais ne rend pas l'objet immuable. \n
Exemple de hoisting :
\nconsole.log(a); // undefined (hoisting)\nvar a = 5;\n\nconsole.log(b); // ReferenceError: Cannot access 'b' before initialization\nlet b = 10;\n\nQuestion : Qu'est-ce que le « hoisting » (remontée) ?
\nC'est un mécanisme par lequel les déclarations de variables et de fonctions sont déplacées au début de leur portée avant l'exécution du code. Les fonctions déclarées avec function sont remontées entièrement, tandis que les variables ne le sont que pour leur déclaration, pas leur initialisation.
2. Closures et contexte (this)
\n\nLes closures sont l'un des points forts de JavaScript. Elles permettent à une fonction de mémoriser l'environnement lexical dans lequel elle a été créée.
\n\nQuestion : Qu'est-ce qu'une closure ? Donnez un exemple.
\nUne closure est une combinaison d'une fonction et de son environnement lexical. Autrement dit, une fonction interne a accès aux variables de la fonction externe même après que celle-ci 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\nQuestion : Comment fonctionne this en JavaScript ?
La valeur de this est déterminée par la façon dont la fonction est appelée, et non par l'endroit où elle est déclarée. Les règles principales :
- \n
- Dans le contexte global (dans le navigateur) —
window, dans Node.js —global. \n - Dans une méthode d'objet — l'objet lui-même. \n
- Dans une fonction appelée avec
new— une nouvelle instance. \n - Lors de l'utilisation de
call,apply,bind— l'objet passé en argument. \n - Dans les fonctions fléchées —
thisprovient du contexte lexical externe. \n
const obj = {\n name: 'Alice',\n greet() {\n console.log(this.name);\n }\n};\n\nconst greet = obj.greet;\ngreet(); // undefined (perte de contexte)\n\nconst boundGreet = obj.greet.bind(obj);\nboundGreet(); // Alice\n\n3. Asynchrone : Event Loop, promesses et async/await
\n\nJavaScript est un langage monothread, mais il traite efficacement les opérations asynchrones grâce à l'Event Loop. C'est l'un des sujets les plus populaires lors des entretiens.
\n\nQuestion : Qu'est-ce que l'Event Loop et comment fonctionne-t-il ?
\nL'Event Loop est une boucle infinie qui surveille la pile d'appels (Call Stack) et les files d'attente de tâches (Task Queue / Microtask Queue). Si la pile est vide, il prend la première tâche de la file des microtasks (Promise, MutationObserver) ou des macrotasks (setTimeout, I/O).
\n\nQuestion : Quelle est la différence entre les microtasks et les macrotasks ?
\n- \n
- Microtasks : Promise.then/catch/finally,