1. Variables & portées
Trois mots-clés pour déclarer : var, let, const.
var: portée fonction, hoisté avec valeurundefined.let: portée bloc, réassignable, zone morte temporelle (TDZ).const: portée bloc, non réassignable (mais le contenu d'un objet reste mutable).
2. Types & coercition
7 types primitifs (string, number, bigint, boolean, undefined, null, symbol) et les objets.
JS coerce automatiquement les types : == compare après coercition, === compare strictement.
3. Fonctions
Citoyennes de première classe : on les assigne, on les passe en argument, on les retourne.
Les fonctions fléchées (=>) n'ont pas leur propre this ni arguments.
4. Closures
Une fonction conserve l'accès aux variables de la portée dans laquelle elle a été créée, même après que cette portée s'est terminée.
5. this & binding
this dépend de comment la fonction est appelée, pas où elle est écrite.
- Appel libre :
this=undefined(strict) ouglobalThis. - Appel méthode
obj.f():this=obj. fn.call/apply/bindforce la valeur dethis.- Flèche : hérite du
thisenglobant.
6. Prototypes & classes
Tout objet a un prototype dont il hérite des propriétés. Les class ES6 sont du sucre syntaxique au-dessus des prototypes.
7. Méthodes de tableau
map, filter, reduce, find, some, every, flatMap… Pipeline déclaratif pour transformer des collections.
8. Destructuring & spread
Extraire des valeurs d'objets ou de tableaux en une ligne, ou recomposer avec ....
9. Promises & async/await
Une Promise représente une valeur future. async/await permet d'écrire de l'asynchrone comme du séquentiel.
10. Event loop
JS est mono-thread. La call stack exécute le code synchrone ; les tâches asynchrones reviennent via deux files : microtasks (promises) puis macrotasks (setTimeout, I/O).
11. Modules
ES modules : import / export. Chaque module a sa propre portée et est évalué une fois.
Exemple (non exécutable ici, fourni à titre indicatif) :
▶ Playground libre
Écrivez votre propre code JavaScript. Tout ce qui passe par console.log/info/warn/error apparaît dans la console ci-dessous.