JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 4 · Application directe du cours
Une seule fois
Portée, fermetures et this · niveau 3 (difficile)
Énoncé
Le bouton « Commander » ne doit envoyer la commande qu'une fois, même si le client clique plusieurs fois. Écrire une fonction d'ordre supérieur uneSeuleFois(fonction) qui renvoie une nouvelle fonction : au premier appel, elle appelle fonction avec les mêmes arguments et renvoie son résultat ; aux appels suivants, elle renvoie le même résultat sans rappeler fonction.
Corrigé
function uneSeuleFois(fonction) {
let dejaAppelee = false;
let resultat;
return (...args) => {
if (!dejaAppelee) {
dejaAppelee = true;
resultat = fonction(...args);
}
return resultat;
};
}
const passerCommande = uneSeuleFois((total) => {
console.log(`Commande de ${total} centimes envoyée`);
return "CMD-001";
});
console.log(passerCommande(5900));
console.log(passerCommande(5900));
console.log(passerCommande(1200));
Commande de 5900 centimes envoyée
CMD-001
CMD-001
CMD-001
La fermeture mémorise deux variables : un booléen « déjà appelée » et le résultat. Le paramètre du reste ...args recueille les arguments, que fonction(...args) retransmet (cette écriture, la décomposition, est présentée au chapitre 5). La commande n'est envoyée qu'une fois ; les appels suivants renvoient le même numéro.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.