Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Function : propriété arguments

Non standard: Cette fonctionnalité n'est pas standardisée. Nous déconseillons d'utiliser des fonctionnalités non standard en production, car leur prise en charge par les navigateurs est limitée, et elles peuvent être modifiées ou supprimées. Toutefois, elles peuvent constituer une alternative appropriée dans certains cas où aucune option standard n'existe.

Obsolète: Cette fonctionnalité n'est plus recommandée. Même si certains navigateurs la prennent encore en charge, elle a peut-être déjà été supprimée des standards du web, est en passe d'être supprimée ou n'est conservée qu'à des fins de compatibilité. Évitez de l'utiliser et mettez à jour le code existant si possible ; consultez le tableau de compatibilité au bas de cette page pour vous aider à prendre votre décision. Sachez que cette fonctionnalité peut cesser de fonctionner à tout moment.

Note : La propriété arguments des objets Function est obsolète. La méthode recommandée pour accéder à l'objet arguments est de se référer à la variable arguments disponible dans les fonctions.

La propriété d'accesseur arguments des instances de Function retourne les arguments passés à cette fonction. Pour les fonctions strictes, fléchées, asynchrones et génératrices, accéder à la propriété arguments lève une TypeError.

Description

La valeur de arguments est un objet semblable à un tableau correspondant aux arguments passés à une fonction.

Dans le cas de la récursivité, c'est-à-dire si la fonction f apparaît plusieurs fois dans la pile d'appels, la valeur de f.arguments représente les arguments correspondant à l'appel le plus récent de la fonction.

La valeur de la propriété arguments est normalement null s'il n'y a pas d'appel en cours de la fonction (c'est-à-dire si la fonction a été appelée mais n'a pas encore terminé son exécution).

Notez que le seul comportement défini par la spécification ECMAScript est que Function.prototype possède un accesseur initial arguments qui lève inconditionnellement une TypeError pour toute requête get ou set (appelé « pillule d'accesseur empoisonné »), et que les implémentations ne sont pas autorisées à modifier cette sémantique pour toute fonction sauf les fonctions classiques non strictes. Le comportement réel de la propriété arguments, s'il diffère de la levée d'une erreur, dépend de l'implémentation. Par exemple, Chrome la définit comme une propriété propre de données, tandis que Firefox et Safari étendent l'accesseur poison initial Function.prototype.arguments pour gérer spécialement les valeurs de this qui sont des fonctions non strictes.

js
(function f() {
  if (Object.hasOwn(f, "arguments")) {
    console.log(
      "arguments est une propriété propre avec le descripteur",
      Object.getOwnPropertyDescriptor(f, "arguments"),
    );
  } else {
    console.log(
      "f ne possède pas de propriété propre nommée arguments. Tentative d'accès à f.[[Prototype]].arguments",
    );
    console.log(
      Object.getOwnPropertyDescriptor(
        Object.getPrototypeOf(f),
        "arguments",
      ).get.call(f),
    );
  }
})();

// Dans Chrome :
// arguments est une propriété propre avec le descripteur {value: Arguments(0), writable: false, enumerable: false, configurable: false}

// Dans Firefox :
// f ne possède pas de propriété propre nommée arguments. Tentative d'accès à f.[[Prototype]].arguments
// Arguments { … }

Exemples

Utiliser la propriété arguments

js
function f(n) {
  g(n - 1);
}

function g(n) {
  console.log("avant : " + g.arguments[0]);
  if (n > 0) {
    f(n);
  }
  console.log("après : " + g.arguments[0]);
}

f(2);

console.log("a retourné : " + g.arguments);

// Journalisation :
// avant : 1
// avant : 0
// après : 0
// après : 1
// a retourné : null

Spécifications

This feature does not appear to be defined in any specification.

Compatibilité des navigateurs

Voir aussi