Comment réussir un entretien JavaScript : Questions essentielles de A à Z
Un entretien pour développeur JavaScript ne se limite pas à une vérification de la syntaxe. Les employeurs souhaitent voir une compréhension approfondie du langage, de ses fonctionnalités et la capacité à travailler avec l'asynchrone. Dans cet article, nous allons décomposer les sujets clés qui vous aideront à réussir l'entretien en toute confiance. Nous aborderons des questions allant des concepts de base aux sujets avancés de Node.js avec des exemples de code réels.
1. Bases : Types de données, Hoisting et Portée
Commençons par les fondamentaux. JavaScript est un langage typé dynamiquement. Comprendre var, let et const est un minimum indispensable.
Question : Quelle est la différence entre var, let et const ?
vara une portée de fonction et est hissé avec la valeurundefined.letetconstont une portée de bloc et ne sont pas initialisés avant la déclaration (Zone Morte Temporelle).constempêche la réaffectation mais ne rend pas l'objet immuable.
Exemple de hoisting :
console.log(a); // undefined (hoisting)var a = 5;
console.log(b); // ReferenceError: Cannot access 'b' before initializationlet b = 10;Question : Qu'est-ce que le hoisting ?
C'est un mécanisme par lequel les déclarations de variables et de fonctions sont déplacées en haut de leur portée avant l'exécution du code. Les fonctions déclarées avec function sont hissées entièrement, tandis que les variables ne le sont que pour la déclaration, pas l'initialisation.
2. Fermetures et Contexte (this)
Les fermetures sont l'une des fonctionnalités les plus puissantes de JavaScript. Elles permettent à une fonction de se souvenir de l'environnement lexical dans lequel elles ont été créées.
Question : Qu'est-ce qu'une fermeture ? Donnez un exemple.
Une fermeture est une combinaison d'une fonction et de son environnement lexical. En d'autres termes, une fonction interne a accès aux variables d'une fonction externe même après que la fonction externe a fini de s'exécuter.
function createCounter() { let count = 0; return function() { count++; return count; };}
const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2Question : Comment fonctionne this en JavaScript ?
La valeur de this est déterminée par la façon dont une fonction est appelée, et non par l'endroit où elle est déclarée. Les règles principales sont :
- Dans le contexte global (dans le navigateur) —
window, dans Node.js —global. - Dans une méthode d'objet — l'objet lui-même.
- Dans une fonction appelée avec
new— une nouvelle instance. - En utilisant
call,apply,bind— l'objet passé. - Dans les fonctions fléchées —
thisest pris du contexte lexical externe.
const obj = { name: 'Alice', greet() { console.log(this.name); }};
const greet = obj.greet;greet(); // undefined (contexte perdu)
const boundGreet = obj.greet.bind(obj);boundGreet(); // Alice3. Asynchrone : Boucle d'événements, Promesses et async/await
JavaScript est un langage mono-thread, mais il gère efficacement les opérations asynchrones grâce à la Boucle d'événements (Event Loop). C'est l'un des sujets les plus populaires lors des entretiens.
Question : Qu'est-ce que la Boucle d'événements (Event Loop) et comment fonctionne-t-elle ?
La Boucle d'événements est une boucle infinie qui surveille la Pile d'appels (Call Stack) et les files d'attente de tâches (File des Tâches / File des Microtâches). Si la pile est vide, elle prend la première tâche de la file des microtâches (Promise, MutationObserver) ou de la file des macrotâches (setTimeout, I/O).
Question : Quelle est la différence entre les microtâches et les macrotâches ?
- Microtâches : Promise.then/catch/finally,