JavaScript - 7.3 Les arguments d'une fonction

En JavaScript, une fonction peut recevoir plus ou moins d'arguments que de paramètres déclarés. Chaque fonction possède un objet spécial appelé arguments, qui donne accès à tous les arguments reçus. Cette leçon montre comment l'utiliser pour calculer une somme, quel que soit le nombre de valeurs passées.

Quand les arguments ne correspondent pas aux paramètres

Prenons une fonction déclarée avec deux paramètres, a et b, qui retourne la somme de a et b. Si on l'appelle avec un seul argument, b n'est pas défini et le résultat n'est pas un nombre.

Si on passe plus d'arguments que de paramètres, JavaScript ne génère pas d'erreur. Seuls les deux premiers arguments sont utilisés dans le calcul.

L'objet arguments

L'objet arguments ressemble à un tableau, mais ce n'est pas un tableau. Ses clés sont les index des arguments, en commençant par 0, et sa propriété length donne le nombre d'arguments reçus.

Cet objet est tout de même itérable, c'est-à-dire qu'on peut le parcourir avec une boucle for...of, comme un tableau.

Calculer la somme de tous les arguments

Pour additionner tous les arguments, on déclare une variable total à 0, puis on parcourt arguments avec une boucle for...of. À chaque tour, la valeur est ajoutée à total, qui est retourné à la fin.

Une fois ce calcul écrit avec arguments, les paramètres a et b peuvent être supprimés de la déclaration, car la fonction ne lit que l'objet arguments.

function somme() {
  let total = 0;
  for (let valeur of arguments) {
    total += valeur;
  }
  return total;
}

console.log(somme(1, 2, 3, 4, 5));

En résumé

Chaque fonction JavaScript possède un objet arguments qui contient tous les arguments reçus. Cet objet n'est pas un tableau, mais il peut être parcouru avec une boucle for...of. Cette technique permet d'écrire une fonction à nombre d'arguments variable. La leçon suivante présente l'opérateur de repos, une écriture plus moderne.

Points clés

  • Une fonction peut recevoir plus ou moins d'arguments que de paramètres déclarés.
  • Un paramètre sans argument n'est pas défini, et les arguments en trop ne provoquent pas d'erreur.
  • L'objet arguments donne accès à tous les arguments reçus.
  • L'objet arguments n'est pas un tableau, mais il est itérable.
  • La propriété length indique le nombre d'arguments reçus.

Questions fréquentes

L'objet arguments est-il un tableau ?

Non. Il ressemble à un tableau, mais ce n'en est pas un. On peut tout de même le parcourir avec une boucle for...of.

Que se passe-t-il si on passe trop d'arguments ?

La fonction ne génère pas d'erreur. Les arguments supplémentaires restent accessibles par l'objet arguments.

Faut-il garder les paramètres dans la déclaration ?

Non, si la fonction n'utilise que l'objet arguments, les paramètres peuvent être supprimés. La leçon suivante montre une écriture plus moderne.