Aller au contenu
M05 · B. Acquérir les fondamentaux de JavaScript

Les fonctions et les fonctions fléchées

Écrire des fonctions avec paramètres et valeur de retour, donner des valeurs par défaut, utiliser les fonctions fléchées (lambdas) et passer une fonction en paramètre (callback).

1Situer

Sur le site d'une agence de voyages de Marrakech, le prix d'un séjour se calcule à plusieurs endroits : la page d'accueil, la fiche du séjour, le panier. Copier le même calcul trois fois, c'est trois fois plus de risques d'erreur. On l'écrit une seule fois dans une fonction, et on l'appelle partout.

2Comprendre

Appeler une fonction : arguments, paramètres, retour
function prixTotal(nuits, prixNuit,           personnes = 1) {   const total = nuits * prixNuit * personnes;   return total; } paramètres nuits = 3 prixNuit = 450 personnes = 2 total = 2700 const prix = prixTotal(3, 450, 2) return → prix = 2700

La fonction prixTotal est définie une fois. Ses paramètres sont nuits, prixNuit et personnes (1 par défaut).

1 / 6

Déclarer et appeler

function prixTotal(nuits, prixNuit, personnes = 1) {  // paramètres, dont un par défaut
  const total = nuits * prixNuit * personnes;          // variable locale
  return total;                                        // valeur renvoyée
}

prixTotal(3, 450);      // 1350  (arguments)
prixTotal(3, 450, 2);   // 2700
  • Les paramètres sont les entrées, return donne la sortie et termine la fonction.
  • Les variables déclarées dans la fonction sont locales : invisibles à l’extérieur (portée).
  • Une fonction fait une seule chose et porte un nom qui commence par un verbe : calculerTotal, afficherListe.

Les fonctions fléchées (lambdas)

const formaterPrix = (montant) => `${montant} DH`;

const prixTotal = (nuits, prixNuit, personnes = 1) => {
  const total = nuits * prixNuit * personnes;
  return total;                 // avec des accolades, return est obligatoire
};

Les fonctions comme valeurs

En JavaScript, une fonction est une valeur : on peut la ranger dans une variable et la passer en paramètre à une autre fonction. On l’appelle alors une fonction de rappel (callback) :

setTimeout(() => console.log('3 secondes plus tard'), 3000);
[1, 2, 3].forEach((n) => console.log(n * 10));
bouton.addEventListener('click', () => { ... });   // partie D

Cette idée est partout en JavaScript : tableaux (B.7), événements (D), AJAX (E).

Exemple simple

La machine à jus du café

On met des oranges (les paramètres), on appuie, et le jus sort (la valeur de retour). On ne sait pas forcément ce qui se passe dedans, on sait juste quoi donner et ce qu'on reçoit.

function prixSejour(nuits, prixNuit) {
  return nuits * prixNuit;
}
prixSejour(3, 450);   // 1350
Exemple simple

La fonction fléchée, une écriture courte

Pour une petite fonction d'une ligne, la flèche => évite d'écrire function et return.

const prixSejour = (nuits, prixNuit) => nuits * prixNuit;

3Manipuler

Le calcul du prix est à transformer en fonctions réutilisables. Suivez les consignes : les résultats s'affichent dans la console et dans la page.
Ouvrir dans le lab ↗
Console
  • Écrivez prixTotal et affichez prixTotal(3, 450) dans la console (1350)
  • Vérifiez le paramètre par défaut : prixTotal(3, 450, 2) donne 2700
  • Affichez les deux séjours dans la liste, pour 2 personnes
  • Le prix du désert doit apparaître formaté : « 3600 DH »

4Pratiquer

Exercice 1 · Return ou console.log ?

Quelle est la différence entre ces deux fonctions ? Que vaut x dans chaque cas ? function a(n) { console.log(n * 2); } function b(n) { return n * 2; } const x = a(5); const y = b(5);

Voir le corrigé
a(5) affiche 10 dans la console mais ne renvoie rien : x vaut undefined.
b(5) n'affiche rien mais renvoie 10 : y vaut 10, on peut le réutiliser
(l'afficher, l'additionner, le mettre dans la page...).

Exercice 2 · Réécrire en fléchée

Réécrivez avec une fonction fléchée : function tva(prix) { return prix * 0.2; }

Voir le corrigé
const tva = (prix) => prix * 0.2;
// avec un seul paramètre, les parenthèses sont facultatives :
const tva2 = prix => prix * 0.2;

Exercice 3 · Une fonction en paramètre

Écrivez une fonction appliquer(liste, operation) qui affiche le résultat de operation pour chaque élément de liste. Appelez-la pour afficher le double de [10, 20, 30].

Voir le corrigé
function appliquer(liste, operation) {
  for (const x of liste) {
    console.log(operation(x));
  }
}
appliquer([10, 20, 30], (n) => n * 2); // 20, 40, 60

5Vérifier

1. Que renvoie une fonction sans instruction return ?
2. Quelle écriture est une fonction fléchée correcte ?
3. Une variable déclarée avec let à l'intérieur d'une fonction est-elle visible en dehors ?