JavaScript : les bases solides pour passer à React
JavaScript pour débutants : variables, fonctions, tableaux, DOM et fetch, avec un projet publié sur GitHub. Formation gratuite en ligne pour préparer React.
Ce que tu vas apprendre
- Écrire des scripts avec variables, conditions et boucles pour automatiser un calcul
- Structurer son code avec des fonctions pures, des fonctions fléchées et des modules ES6
- Transformer des données avec map, filter, reduce, la déstructuration et le spread
- Construire une interface interactive en JavaScript pur avec le DOM et les événements
- Sauvegarder l'état d'une application avec localStorage et JSON
- Déboguer avec la console et les outils du navigateur pour diagnostiquer les erreurs fréquentes
- Récupérer des données d'une API avec fetch et async/await, en gérant chargement, succès et erreur
À propos de cette formation
Cette formation t'apprend les bases solides de JavaScript pour aborder React sans te sentir perdu. Tu écris des scripts qui décident et répètent, tu manipules tableaux et objets avec map, filter et reduce, tu construis une liste de tâches interactive, puis une application météo qui appelle une API et que tu publies sur GitHub Pages. Tu termines par un premier composant React et un plan d'action pour viser un poste junior.
Tu progresses par leçons courtes que tu écoutes ou lis, avec des exercices pratiques, un quiz à chaque module, un examen final et une attestation. Un coach IA répond à tes questions quand tu bloques.
Programme de la formation
5 modules · 28 leçons00Bienvenue
1 leçon
- Introduction : JavaScriptCe que tu vas apprendre, et comment ton parcours va se dérouler.5 min
01Module 1 : Logique et fonctions (J1–J4)
7 leçons
Écrire des scripts qui décident et répètent, puis les structurer en fonctions pures réutilisables, avec le débogage dès le premier jour.
- Mettre en place VS Code, Live Server, Git et lire une première erreurVous saurez créer le dépôt js-14-jours, lancer un script, utiliser console.log et lire un message d'erreur. Base indispensable pour le commit quotidien qui servira de preuve à un recruteur.40 min
- Variables, types et conversion : calculer le total d'une commande en FCFAVous saurez choisir const ou let, utiliser typeof et convertir des entrées texte en nombres en gérant NaN. Ce sont les réflexes de base pour ne plus copier-coller, et const est le choix par défaut des composants React.45 min
- Conditions et boucles : écrire un barème de frais de transfert fictifVous saurez écrire une règle avec if/else, opérateurs logiques et ternaire, puis cumuler avec une boucle for...of. Le ternaire et && sont exactement ce qui sert au rendu conditionnel en React et à valider des entrées.45 min
- Exercice chronométré : frais.js avec 10 assertions console.assertVous saurez vérifier votre propre code avec console.assert et corriger seul vos erreurs. Cet exercice mesure votre autonomie, un indicateur clé de votre progression vers l'emploi.40 min
- Fonctions pures et fléchées : refactorer frais.js en utils.jsVous saurez écrire une fonction pure avec return, des paramètres par défaut et la réécrire en fonction fléchée. Un composant React est une fonction : cette leçon prépare directement votre premier composant.45 min
- Portée et closures : prédire la sortie de 4 extraitsVous saurez prédire ce qu'affiche un code selon la portée de bloc et de fonction. Les erreurs de portée sont un blocage classique du débutant et reviennent dans les hooks React.35 min
- Quiz M1 : variables, conditions, boucles et fonctionsVous saurez valider vos acquis du module 1 avant d'aborder les données. Point de contrôle rapide pour repérer vos lacunes en logique.20 min
02Module 2 : Données et JavaScript moderne (J5–J8)
7 leçons
Manipuler tableaux et objets avec map, filter, reduce, la déstructuration, le spread et les modules, le socle exact du JavaScript que l'on rencontre en React.
- Tableaux et objets : modéliser le stock d'un commerçant fictifVous saurez créer un tableau d'objets produits, accéder aux propriétés par point et crochets, et distinguer mutation et copie. Le stock sert de fil rouge pour la suite et prépare l'état React.40 min
- map et filter : produire un catalogue des produits en stockVous saurez transformer et filtrer une liste sans boucle manuelle, y compris une recherche par texte avec includes. Le map sert à rendre des listes en React, et ces pipelines sont très demandés en entretien junior.45 min
- reduce : calculer le total d'un panier et un récapitulatifVous saurez réduire un tableau à une valeur unique avec une valeur initiale, et choisir entre reduce, map et filter. Utile pour totaux, compteurs et agrégations dans une vraie interface.40 min
- Déstructuration, spread et template literals : copier sans muterVous saurez déstructurer des objets et paramètres, copier avec le spread ({...tache, fait: true}) et générer un message avec des backticks. Ce sont les réflexes des props et de l'état React, et le piège de la copie superficielle est expliqué.45 min
- Modules ES6 : séparer data.js, utils.js et main.jsVous saurez organiser du code en plusieurs fichiers avec export et import et corriger l'erreur liée à type="module". Cette structure ressemble à un vrai projet moderne et à l'organisation de composants React.35 min
- Exercice : pipeline de données de la boutique sans boucle ni mutationVous saurez enchaîner filtre, formatage et total en 3 transformations seul. Cet exercice mesure votre autonomie sur les données avant le DOM.35 min
- Quiz M2 : tableaux, objets et JavaScript moderneVous saurez vérifier votre maîtrise de map, filter, reduce, spread et modules. Deuxième point de contrôle de mi-parcours (J7–J8) avant le DOM.20 min
03Module 3 : DOM, événements et débogage (J9–J11)
6 leçons
Construire la liste de tâches interactive en JavaScript pur avec un tableau d'état et une fonction render(), puis apprendre à déboguer avec méthode.
- Le DOM : afficher la liste de tâches avec querySelector et createElementVous saurez sélectionner des éléments, créer des li et afficher un tableau de tâches dans la page. C'est la première interface construite pour votre portfolio.40 min
- Événements : ajouter, cocher et supprimer avec addEventListenerVous saurez réagir à un clic ou à un envoi de formulaire avec preventDefault et la délégation via event.target. Vous obtenez une liste de tâches réellement interactive à montrer en entretien.45 min
- Persister avec localStorage et JSON : la liste survit au rechargementVous saurez sauvegarder et relire l'état avec JSON.stringify et JSON.parse, et diagnostiquer une liste vide après rechargement. C'est la 4e fonctionnalité qui rend votre todo crédible.35 min
- Déboguer avec méthode : breakpoints Chrome DevTools et bug-huntVous saurez poser un breakpoint, avancer pas à pas et inspecter les variables pour diagnostiquer this, portée, asynchrone et mutations. Savoir déboguer est une compétence très valorisée chez un junior.40 min
- Exercice : refaire la todo en 40 minutes sans aideVous saurez reconstruire seul un état + render() avec ajout, cochage, suppression et persistance. Mesure d'autonomie clé avant l'asynchrone.40 min
- Quiz M3 : DOM, événements et débogageVous saurez vérifier votre compréhension du DOM, des événements, du stockage et du débogage avant d'aborder fetch.10 min
04Module 4 : Asynchrone, projet publié et passerelle React (J12–J14)
7 leçons
Récupérer des données d'une API, publier l'app météo sur GitHub Pages, convertir un rendu en composant React et bâtir un plan d'action emploi réaliste.
- Promesses, fetch et JSON : appeler Open-Meteo sans clé APIVous saurez envoyer une requête fetch, lire la réponse JSON et vérifier response.ok, car fetch ne rejette pas sur un 404. Compétence centrale pour afficher des données d'API dans votre app météo.45 min
- async/await, try/catch et 3 états d'interface : chargement, succès, erreurVous saurez écrire une fonction async avec try/catch et afficher trois états à l'écran, y compris hors-ligne. L'app météo gagne en robustesse, point que les recruteurs regardent.45 min
- Exercice : app météo de 3 villes avec Promise.all et rendu par mapVous saurez afficher plusieurs villes avec Promise.all et générer la liste avec map. Vous appliquez fetch et rendu de liste pour obtenir un projet présentable.50 min
- Publier sur GitHub Pages et écrire un README qui convainc un recruteurVous saurez déployer votre app météo et rédiger un README clair avec captures, fonctionnalités et instructions. Premier lien public à mettre sur votre profil pour viser un poste junior.40 min
- Pont React : convertir render() en composant CarteMeteo avec props et map + keyVous saurez reconnaître en React ce que vous maîtrisez déjà : fonction, props déstructurées, liste avec map et key, copie d'état par spread. Vous écrivez votre premier composant simple.45 min
- Quiz M4 : asynchrone, fetch et pont ReactVous saurez valider fetch, async/await, les états d'interface et les prérequis JavaScript de React avant le projet final.15 min
- Projet final : dépôt portfolio, app météo en ligne, composant React et plan d'action sur 6 semainesVous livrez un dépôt GitHub public avec todo, app météo déployée et composant React, plus un plan réaliste de 6 semaines pour viser un poste junior front-end. Ce plan rappelle honnêtement qu'un niveau employable demande plusieurs mois de pratique régulière.50 min
Aperçu gratuit · Module 1 : Logique et fonctions (J1–J4)
Le premier module est en accès libre. Commence le parcours pour débloquer la suite.
Mettre en place VS Code, Live Server, Git et lire une première erreur
À la fin de cette séance de 60 minutes, vous aurez un dossier de travail prêt, un dépôt Git nommé js-14-jours avec un premier commit, un script qui…
Objectifs pratiques
À la fin de cette séance de 60 minutes, vous aurez un dossier de travail prêt, un dépôt Git nommé js-14-jours avec un premier commit, un script qui s'exécute dans le navigateur via Live Server, et un mini journal de 3 bugs lus et compris. C'est la base de toute la suite : chaque jour se termine par un commit, et ces commits seront votre première preuve de sérieux face à un recruteur junior front-end.
Pourquoi c'est utile pour votre objectif
Votre objectif est de lire et d'écrire le JavaScript d'un composant React simple en 14 jours, puis de viser un poste junior. Avec 60 minutes par jour, vous ne pouvez pas perdre du temps à cause d'un environnement mal réglé ou d'un message d'erreur que vous ne savez pas lire. Savoir lire une erreur, c'est la compétence qui évite de copier-coller aveuglément. Un historique de commits quotidiens montre aussi une régularité observable.
Méthode pas à pas
- Installer les outils (10 min) : VS Code, Git, un navigateur avec outils de développement (Chrome ou Firefox). Dans VS Code, installez l'extension Live Server. Vérifiez Git dans un terminal avec
git --version. - Créer le dossier et le dépôt (5 min) :
mkdir js-14-jours,cd js-14-jours,git init. Ouvrez le dossier dans VS Code. - Créer
index.html(5 min) : une page minimale avec un titre, puis avant la fermeture de</body>la ligne<script src="script.js"></script>. - Créer
script.js(5 min) : écrivezconsole.log("Bonjour JS, jour 1");. - Lancer Live Server (3 min) : clic droit sur
index.html, « Open with Live Server ». Ouvrez la console avec F12 (onglet Console) et vérifiez que le message apparaît. - Provoquer 3 erreurs, une à la fois (15 min) : corrigez la précédente avant la suivante. Pour chacune, notez le message exact, le type, le fichier et la ligne affichés dans la console, la cause, la correction.
- SyntaxError : supprimez une parenthèse fermante, par exemple
console.log("test". - ReferenceError : appelez une variable qui n'existe pas,
console.log(prix);. - TypeError :
const total = 5000; total();(appeler un nombre comme une fonction).
- Commit (5 min) :
git add .puisgit commit -m "Jour 1 : environnement et journal de bugs". Vérifiez avecgit log --oneline. - Bilan (10 min) : relisez le journal sans regarder le code et expliquez chaque erreur avec vos mots.
Exemple concret
Vous écrivez console.log(montant) pour afficher le prix d'un article en FCFA, mais vous avez oublié de déclarer montant. La console affiche une ReferenceError avec le nom de la variable et le numéro de ligne. Lecture : le type dit la famille du problème (ici, un nom inconnu), le message dit quoi, et le lien du fichier:ligne dit où. Vous corrigez avec const montant = 2500;, rechargez, et la valeur s'affiche.
Erreurs à éviter
- Ouvrir
index.htmlpar double-clic au lieu de Live Server : le rechargement automatique manque et vous croyez que rien ne change. - Oublier d'enregistrer le fichier (Ctrl+S) avant de regarder la console.
- Provoquer les 3 erreurs en même temps : la console devient illisible. Une seule à la fois.
- Lire seulement la première ligne rouge sans regarder le fichier et le numéro de ligne.
- Faire
git commitsansgit add, ou oublier de lancergit initdans le bon dossier. - Ne pas corriger l'erreur après l'avoir notée : le commit final doit contenir un script qui tourne sans erreur.
À faire maintenant
Livrable : le dépôt js-14-jours avec index.html, script.js et un fichier journal-bugs.md contenant un tableau à 3 lignes (type, message exact, ligne, cause, correction). Faites un premier commit. Pont React : en React aussi, vous lirez la console à chaque test, et un composant qui plante affiche ces mêmes types d'erreurs.
Variables, types et conversion : calculer le total d'une commande en FCFA
À la fin de cette leçon (environ 60 minutes), vous saurez déclarer des variables avec const ou let , vérifier un type avec typeof , convertir un prix…
Objectifs pratiques
À la fin de cette leçon (environ 60 minutes), vous saurez déclarer des variables avec const ou let, vérifier un type avec typeof, convertir un prix saisi en texte avec Number() et gérer NaN. C'est la première brique du module « Logique et fonctions » : sans elle, vous copiez du code sans savoir pourquoi "5" + 3 donne "53". Elle vous rapproche aussi de React, où const est le choix par défaut.
Pourquoi c'est utile pour votre objectif
Un futur développeur front-end reçoit sans cesse des données sous forme de texte : champs de formulaire, réponses d'API, paramètres d'URL. Si vous ne maîtrisez pas les types, vos totaux sont faux et vos interfaces affichent NaN. Dans un composant React, vous écrirez const total = ... des dizaines de fois. Prendre le bon réflexe dès J1 évite des bugs difficiles à trouver plus tard.
Méthode pas à pas
- Créez
commande.jset lancez-le avec Node, ou collez-le dans la console du navigateur (F12, onglet Console). Utilisezconsole.logpour tout vérifier. - Déclarez avec
constpar défaut. Utilisezletseulement si la valeur doit changer (ex. un total qui s'accumule). Exemple :const nomBoutique = "Chez Awa";puislet total = 0;. - Identifiez le type avec
typeof.typeof "1500"donne"string",typeof 1500donne"number". Affichez-le avant de calculer. - Convertissez avec
Number().const prix = Number("1500");donne 1500. Ne comptez pas sur la conversion automatique. - Vérifiez
NaN.Number("abc")donneNaN, ettypeof NaNreste"number". Testez avecNumber.isNaN(prix)dans unif, et affichez un message clair au lieu de continuer le calcul. - Calculez et affichez avec un template literal : `
console.log(Total : ${total} FCFA);`. - Commentez chaque bloc : pourquoi
const, pourquoi la conversion, ce que donne"5" + 3.
Exemple concret
Boutique de quartier fictive. Les prix arrivent d'un formulaire, donc en texte :
```js const nomBoutique = "Chez Awa"; const prixRiz = "1500"; // texte saisi const prixHuile = "2000"; const quantiteRiz = 2; let total = 0;
// "5" + 3 -> "53" : le + concatène dès qu'un texte est présent console.log("5" + 3); // "53" console.log("5" - 3); // 2 : le - force une conversion numérique
const riz = Number(prixRiz); const huile = Number(prixHuile); if (Number.isNaN(riz) || Number.isNaN(huile)) { console.log("Prix invalide : vérifiez la saisie"); } else { total = riz * quantiteRiz + huile; console.log(${nomBoutique} - Total : ${total} FCFA); // 5000 FCFA } ```
Sans Number(), prixRiz + prixHuile donnerait "15002000", un total absurde. Les barèmes sont fictifs : l'objectif est d'apprendre le mécanisme.
Erreurs à éviter
- Utiliser
letpartout : cela masque les valeurs qui ne devraient jamais changer. Essayezconstd'abord. - Réaffecter une
const:TypeError: Assignment to constant variable. Lisez le message dans la console, il indique la ligne. - Additionner du texte :
"5" + 3donne"53". Convertissez avant de calculer. - Tester
NaNavec===:NaN === NaNest faux. UtilisezNumber.isNaN(). - Croire que
typeof NaNsignale l'erreur : il renvoie"number". Seule la vérification explicite protège le calcul. - Une chaîne vide :
Number("")donne0, pasNaN. Testez aussi qu'elle n'est pas vide avant de convertir.
À faire maintenant
Créez commande.js pour une boutique de quartier fictive :
- Déclarez 5 variables (nom de la boutique, deux prix en texte, une quantité, un total).
- Convertissez les prix en nombres.
- Affichez un total en FCFA avec un template literal.
- Ajoutez un cas
NaN(ex. prix"abc") géré par unif. - Écrivez en commentaire pourquoi
"5" + 3donne"53". - Faites un commit Git en fin de séance. Pont React :
constet les valeurs bien typées sont la base de tout composant.
Conditions et boucles : écrire un barème de frais de transfert fictif
Dans cette leçon, vous allez écrire un fichier frais.js qui calcule des frais de transfert fictifs sur 3 paliers, puis cumule les frais d'une liste…
Objectifs pratiques
Dans cette leçon, vous allez écrire un fichier frais.js qui calcule des frais de transfert fictifs sur 3 paliers, puis cumule les frais d'une liste de montants avec une boucle for...of. C'est un pas concret vers votre objectif : le ternaire et && servent directement au rendu conditionnel en React. Les conditions et boucles reviennent aussi dans les tests techniques juniors.
Pourquoi c'est utile pour votre objectif
Un composant React affiche des choses différentes selon les données, par exemple {erreur && <p>...</p>} ou {estVide ? 'Aucune tâche' : 'Liste'}. Ces écritures sont des conditions JavaScript. Une boucle qui cumule prépare aussi reduce (module 2). Avec 60 minutes par jour, il vaut mieux maîtriser ces bases que survoler des notions avancées.
Méthode pas à pas
- Fixez le barème fictif (en FCFA). Ce barème est inventé pour l'exercice, pas un vrai tarif :
- montant jusqu'à 10 000 : frais de 100 ;
- de 10 001 à 50 000 : frais de 300 ;
- au-delà de 50 000 : frais de 600.
- Créez
frais.jset déclarez la fonction avecconst:const calculerFrais = (montant) => { ... }. - Validez l'entrée d'abord. Si
typeof montant !== 'number' || montant <= 0, renvoyez0ounull. Le||signifie « l'un ou l'autre », le&&signifie « les deux à la fois ». - Écrivez les paliers avec if / else if / else, en comparant du plus petit au plus grand. Utilisez
===et!==, jamais==, car==convertit les types en silence (0 == ''vauttrue). - Testez avec 6 montants qui touchent les bornes : 0 ou -5, 5 000, 10 000, 10 001, 50 000, 80 000. Affichez le résultat avec
console.log. - Ajoutez la boucle de cumul :
let total = 0; for (const m of montants) { total += calculerFrais(m); }. Affichez le total. - Essayez le ternaire sur une ligne :
const libelle = total > 1000 ? 'Frais élevés' : 'Frais normaux';. - Faites un commit Git à la fin de la séance.
Exemple concret
```js const calculerFrais = (montant) => { if (typeof montant !== 'number' || montant <= 0) return 0; if (montant <= 10000) return 100; else if (montant <= 50000) return 300; else return 600; };
const montants = [5000, 10000, 10001, 50000, 80000, -5]; let total = 0; for (const m of montants) { total += calculerFrais(m); } console.log(total); // 100 + 100 + 300 + 300 + 600 + 0 = 1400 ```
Vérifiez à la main : 10 000 reste dans le premier palier grâce à <=. Si vous aviez écrit <, vous obtiendriez 300 au lieu de 100. C'est l'erreur de borne, la plus fréquente.
Erreurs à éviter
- Utiliser
==au lieu de===: cela viole le critère de réussite et cache des bugs de types. - Oublier les bornes : testez toujours la valeur exacte du seuil et celle juste au-dessus.
- Mal ordonner les paliers : si vous testez
montant <= 50000avantmontant <= 10000, le premier palier n'est jamais atteint. - Oublier d'initialiser
totalà 0 : le résultat devientNaNouundefined. - Confondre
=(affectation) et===(comparaison) dans unif. - Copier-coller sans relire : expliquez chaque ligne à voix haute avant de passer à la suite.
À faire maintenant
Créez frais.js avec la fonction calculerFrais et la boucle de cumul. Livrable : le fichier, avec un tableau de 6 montants testés et le résultat attendu écrit en commentaire à côté de chacun. Lancez-le avec Node ou la console du navigateur, puis faites un commit.
Pont React : montant > 50000 ? 'Élevé' : 'Normal' s'écrit de la même façon dans le JSX d'un composant.
Exercice chronométré : frais.js avec 10 assertions console.assert
Pourquoi cet exercice\n\nVotre objectif est de pouvoir lire et écrire le JavaScript d'un composant React simple, puis de viser un poste junior. Un recruteur attend que vous sachiez vérifier votre propre code sans relire à l'œil. Cet exercice chronométré mesure votre autonomie : combien d'assertions réussissent du premier coup, et combien de bugs vous corrigez seul. Il alimente aussi votre indicateur « exercices résolus sans aide ».\n\n
Contexte\n\nVous avez écrit frais.js, un barème fictif de frais de transfert d'argent en FCFA pour une boutique de quartier. Ce barème est un choix pédagogique, pas un tarif réel. Exemple de barème à adapter au vôtre : de 1 à 5 000 FCFA, frais fixes de 100 ; de 5 001 à 20 000, frais de 2 % ; au-delà de 20 000, frais de 1,5 % avec un minimum de 400. Si votre fonction applique un autre barème, gardez le vôtre et restez cohérent.\n\n
Étapes (durée estimée : 45 à 60 min, chronomètre en main)\n\n1. (5 min) Ouvrez frais.js. Notez en commentaire la signature, par exemple calculerFrais(montant), et le barème. Ne regardez aucune solution.\n2. (5 min) Définissez le comportement pour les entrées invalides : retourner null, ou lever une erreur. Choisissez-en un et tenez-vous-y.\n3. (20 min) Écrivez exactement 10 appels console.assert(condition, message). Le message doit indiquer l'entrée et le résultat attendu.\n4. (10 min) Ouvrez la console du navigateur ou Node. Lancez le fichier et comptez les assertions qui passent du premier coup. Un échec affiche le message dans la console.\n5. (10 min) Pour chaque échec, déterminez si l'erreur est dans le code ou dans le test. Corrigez, relancez, puis notez-la dans journal-bugs.md.\n6. (5 min) Faites le commit du jour.\n\n
Répartition imposée des 10 assertions\n\n- 3 montants normaux, un par palier.\n- 3 limites de paliers : 5 000, 5 001 et 20 000.\n- 2 cas limites : 0 et un montant négatif.\n- 2 entrées invalides : texte comme \"abc\", et undefined ou NaN.\n\nAttention aux nombres décimaux : comparez avec Math.round pour éviter les écarts d'arrondi.\n\n
Livrables\n\n- frais.js avec la fonction et ses 10 assertions.\n- journal-bugs.md : pour chaque échec, l'entrée, le résultat obtenu, le résultat attendu, la cause et la correction.\n- Un commit du jour, par exemple test: 10 assertions pour frais.js.\n- Une ligne de bilan : « X/10 au premier passage, temps total Y min ».\n\n
Critères de réussite\n\n- Au moins 8 assertions sur 10 passent sans aide.\n- Les cas limites 0 et négatif sont testés.\n- Chaque échec est corrigé et documenté dans le journal de bugs.\n- Aucune solution n'a été consultée.\n\n
Erreurs à éviter\n\n- Écrire console.assert(resultat) sans comparer à une valeur attendue.\n- Tester uniquement les cas faciles.\n- Corriger le test pour qu'il passe au lieu de se demander si le code est faux.\n- Oublier que console.assert n'affiche rien quand le test réussit.\n\n
Pont vers React\n\nEn React, vous écrirez des fonctions pures dont la sortie dépend de leurs entrées. Savoir les tester avec des cas limites est la même compétence.
Fonctions pures et fléchées : refactorer frais.js en utils.js
À la fin de cette leçon (environ 60 minutes), vous aurez transformé un script frais.js en un fichier utils.js propre, fait de fonctions pures. Vous…
Objectifs pratiques
À la fin de cette leçon (environ 60 minutes), vous aurez transformé un script frais.js en un fichier utils.js propre, fait de fonctions pures. Vous saurez aussi les réécrire en fonctions fléchées. C'est la compétence qui rapproche le plus de React : un composant n'est qu'une fonction qui reçoit des données et renvoie un résultat, sans rien modifier autour d'elle.
Pourquoi c'est utile pour votre objectif
Pour viser un poste junior front-end, il faut lire et écrire du JavaScript comme celui d'un composant React simple. Un composant fait ce que fait une fonction pure : mêmes entrées, même sortie, aucun effet caché. Des fonctions pures sont aussi faciles à tester dans la console, donc faciles à déboguer. Et dans votre portfolio, un utils.js lisible montre que vous structurez votre code au lieu de copier-coller.
Les trois notions à maîtriser
- Fonction pure : elle dépend uniquement de ses paramètres, renvoie une valeur avec
return, et ne modifie aucune variable extérieure (niconsole.logutile à la logique, ni écriture dans le DOM, ni changement d'un tableau reçu). - Paramètre par défaut :
function f(montant, taux = 0.02)évite lesundefinedquand l'appelant omet un argument. - Fonction fléchée :
const f = (montant, taux = 0.02) => montant * taux;Avec une seule expression, lereturnest implicite. Avec des accolades{}, il faut écrirereturn.
Méthode pas à pas
- Repérez les effets de bord dans frais.js. Soulignez toute variable déclarée hors des fonctions et modifiée à l'intérieur (par exemple
let total = 0puistotal += frais). Soulignez aussi lesconsole.logqui tiennent lieu de résultat. - Isolez trois responsabilités : calculer les frais, formater un montant, calculer le total. Une fonction = une tâche.
- Écrivez
calculerFrais(montant, taux = 0.02). Elle renvoiemontant * tauxet rien d'autre. - Écrivez
formaterMontant(montant). Elle renvoie une chaîne avec un template literal, par exemple `${montant} FCFA`. - Écrivez
totalAvecFrais(montant, taux). Elle compose les deux autres :montant + calculerFrais(montant, taux). Vous pouvez passer le résultat àformaterMontantà l'appel. - Réécrivez-en trois en fonctions fléchées et comparez les résultats sur les mêmes entrées avec
console.log. - Exportez avec
exportsi vous êtes déjà en module, sinon laissez les fonctions dansutils.js. Faites ensuite un commit Git : « refactor: frais.js vers utils.js ».
Exemple concret
Avant (impur) :
``js let total = 0; function ajouterFrais(montant) { total = montant + montant * 0.02; console.log(total); } ``
Problème : le résultat vit dans une variable globale, et la fonction ne renvoie rien. Appelée deux fois, elle écrase total.
Après (pur) :
``js function calculerFrais(montant, taux = 0.02) { return montant * taux; } function formaterMontant(montant) { return ${montant} FCFA`; } function totalAvecFrais(montant, taux) { return montant + calculerFrais(montant, taux); }
const calculerFraisFleche = (montant, taux = 0.02) => montant * taux; const formaterMontantFleche = (montant) => ${montant} FCFA; const totalAvecFraisFleche = (montant, taux) => montant + calculerFraisFleche(montant, taux);
console.log(formaterMontant(totalAvecFrais(10000))); ```
Vérification : calculerFrais(10000) donne 200. totalAvecFrais(10000) donne 10200, mais totalAvecFrais(10000, undefined) fonctionne aussi grâce au défaut, à condition de le prévoir dans totalAvecFrais (voir erreurs).
Erreurs à éviter
- Oublier
return: la fonction renvoieundefined. Avec une flèche à accolades, c'est l'erreur la plus fréquente. - Modifier un paramètre objet ou tableau : cela mute l'original. Renvoyez une nouvelle valeur.
- Perdre le défaut dans la composition : si
totalAvecFrais(montant, taux)passeundefinedàcalculerFrais, le défaut decalculerFraiss'applique quand même. Vérifiez-le par un test. - Mélanger calcul et affichage :
formaterMontantformate, elle n'affiche pas. L'affichage se fait ailleurs. - Une fonction fléchée n'est pas toujours plus courte à lire : gardez la clarté avant tout.
Pont React
Un composant comme function Prix({ montant }) reçoit des props et renvoie du JSX sans modifier l'extérieur. Vous venez de pratiquer exactement ce réflexe.
À faire maintenant
Livrable : un fichier utils.js committé. Il contient les 3 fonctions pures, 3 réécritures en flèche, et une ligne de test par fonction dans la console. Notez en commentaire les résultats attendus (200, 10200, "10200 FCFA").
Portée et closures : prédire la sortie de 4 extraits
Dans cette leçon, vous apprenez à prédire la sortie d'un code JavaScript en lisant la portée (bloc, fonction) et à écrire une closure de mémoire.…
Objectifs pratiques
Dans cette leçon, vous apprenez à prédire la sortie d'un code JavaScript en lisant la portée (bloc, fonction) et à écrire une closure de mémoire. C'est une étape directe vers votre objectif : lire le JS d'un composant React sans deviner. Les hooks comme useState reposent sur les closures. Les erreurs de portée sont aussi parmi les bugs les plus fréquents du débutant.
Pourquoi c'est utile pour votre objectif
Pour un poste junior front-end, on attend que vous diagnostiquiez un bug au lieu de modifier le code au hasard. Prédire avant d'exécuter vous force à construire un modèle mental. Quand ce modèle est faux, l'écart entre prédiction et résultat vous montre précisément ce que vous n'avez pas compris. Cette lacune est alors corrigée une fois pour toutes.
Les trois idées à maîtriser
- Portée de fonction : une variable déclarée dans une fonction n'existe que dans cette fonction.
- Portée de bloc :
letetconstn'existent que dans les accolades{ }où elles sont déclarées (if, for, etc.). - Problème de
var:varignore les blocs. Elle est visible dans toute la fonction et remontée en haut (hoisting) avec la valeurundefined. Aveclet/const, accéder à la variable avant sa déclaration lève une erreur. - Closure : une fonction garde l'accès aux variables de l'endroit où elle a été créée, même après la fin de la fonction parente.
Méthode pas à pas
- Copiez l'extrait sans l'exécuter. Notez dans votre journal de bugs : « Extrait n°X ».
- Soulignez chaque déclaration (
var,let,const, paramètres) et notez sa portée : globale, fonction ou bloc. - Déroulez le code ligne par ligne comme un tableau : colonne « ligne », colonne « valeur des variables », colonne « affichage ».
- Écrivez votre prédiction exacte (y compris
undefinedou le nom de l'erreur). - Exécutez dans la console du navigateur (F12, onglet Console) et comparez.
- Expliquez chaque écart en une phrase, par exemple : «
varn'a pas de portée de bloc, donciexiste encore après la boucle ». - Réécrivez de mémoire un exemple de closure, sans regarder la leçon.
Exemple concret
Prenons un compteur de ventes d'une boutique de quartier :
``js function creerCompteur() { let total = 0; return function (montant) { total += montant; return total; }; } const caisse = creerCompteur(); caisse(500); console.log(caisse(1500)); // 2000 ``
creerCompteur est terminée, mais la fonction retournée se souvient de total. Personne d'autre ne peut modifier total : c'est une closure. Dans React, useState fonctionne avec ce même principe de fonctions qui se souviennent de leur contexte.
Autre cas, la boucle classique :
``js for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 0); } ``
Affichage : 3, 3, 3, car un seul i partagé existe pour toute la fonction. Avec let i, chaque tour de boucle crée son propre i : 0, 1, 2.
Erreurs à éviter
- Exécuter le code avant d'avoir écrit la prédiction : vous perdez l'apprentissage.
- Écrire « ça marche pas » sans nommer l'erreur (
ReferenceError,undefined...). - Utiliser
varpar habitude : préférezconst, puisletsi la valeur change. - Confondre closure et variable globale : la closure garde une variable privée, pas globale.
- Corriger un écart sans l'expliquer en une phrase.
À faire maintenant
Dans votre journal de bugs, créez une section « Portée ». Composez ou choisissez 4 extraits : (1) var dans un if lu après le bloc, (2) let dans un bloc lu à l'extérieur, (3) la boucle for avec var et setTimeout, (4) un compteur en closure. Pour chacun : prédiction écrite, résultat en console, explication en une phrase. Terminez par un exemple de closure écrit de mémoire, puis faites un commit Git.
4 modules de plus · 21 leçons guidées par l'IA, avec exercices et coach à chaque étape.
Questions fréquentes
Combien de temps dure la formation JavaScript ?
28 leçons, environ 17h 15min au total, à suivre à ton rythme. Chaque leçon dure quelques minutes : tu peux l'écouter ou la lire.
Est-ce que cette formation est gratuite ?
Oui. Tu la suis gratuitement, il suffit de créer ton compte Blemama.
Faut-il un niveau particulier pour commencer ?
Elle est prévue pour un niveau débutant. À chaque leçon, un coach IA répond à tes questions et réexplique ce qui n'est pas clair.
Comment se déroule la formation ?
Le parcours compte 4 modules. Chaque leçon est lue à voix haute pendant que le texte avance, avec des exercices pratiques et un quiz à la fin de chaque module.
Est-ce que j'obtiens une attestation à la fin ?
Oui. À la fin du parcours, un examen final valide ce que tu as appris et tu reçois une attestation Blemama.
Sources de la recherche
CoachGPT a construit cette formation à partir d'une recherche approfondie sur le sujet. Quelques sources consultées :
Formations similaires
Tu veux une formation sur un autre sujet ? Demande à CoachGPT de te créer la tienne
Avis des apprenants
Publiés après avoir terminé le parcoursAucun avis pour le moment. Les avis apparaissent ici quand un apprenant termine le parcours.
Discussion
Pose une question ou partage ton retour avec les autres apprenants.
Aucune discussion pour le moment.
Les visiteurs peuvent lire la discussion, les membres peuvent participer.