Arguments et paramètres de fonctions en Javascript

Nous poursuivons notre série consacrée aux fonctions en Javascript par l’utilisation des paramètres de fonctions.

Les paramètres sont donc les variables définies dans la signature de la fonction, tandis que les arguments constituent les valeurs effectivement passées lors de l’appel de celle-ci pour en initialiser les paramètres.

En Javascript, il n’est pas obligatoire de passer tous les arguments à la fonction qui compte alors des paramètres optionnels, de même qu’il n’est pas nécessaire de déclarer tous ces paramètres. C’est ce qu’on appelle des varargs.

Arguments optionnels

Le paramètre qui n’est pas initialisé par un argument procède du même principe qu’une simple variable et sa valeur vaut undefined. On peut lui affecter une valeur par défaut grâce à l’opérateur || qui, en Javascript, retourne la valeur acceptée et non le résultat booléen.

On remarque dans l’exemple suivant que le paramètre arg n’est pas défini par un argument, et vaut undefined jusqu’à son initialisation avec une valeur par défaut.

Paramètres dynamiques

Inversement, il est possible de passer des arguments lors de l’appel de fonction qui ne soient pas repris comme paramètres et qui sont alors connus de la seule variable arguments. Il s’agit d’une variable réservée qui contient, sous forme de tableau, l’ensemble des arguments passés lors de chaque appel de fonction.

La variable arguments est quelque peu particulière. Premièrement, les paramètres de la fonction lui sont toujours passés par référence, même s’il s’agit de primitives (string, number, boolean).

D’autre part, cette variable est déclarée au début de chaque définition de fonction, et ne possède donc pas, de fait, une portée accessible depuis des fonctions imbriquées.

Il existe également des différences de comportement selon le mode que l’on a déclaré. En mode strict, le mot-clé arguments est un mot réservé qu’il n’est pas possible de redéfinir.

Alors qu’en mode non-strict, une certaine liberté ne doit pas nous inciter pour autant à utiliser cette variable n’importe comment.

Enfin, attention que l’utilisation d’arguments en tant que propriété de la fonction est obsolète en mode strict.

callee et caller

Vous aurez remarqué dans l’exemple précédent qu’arguments est un objet ayant son propre type ([object Arguments]), bien qu’on l’utilise tel un Array. Ceci permet de bénéficier d’attributs supplémentaires, arguments.callee et arguments.caller. Cette utilisation est toutefois dépréciée en ECMAScript5, sous le mode strict, la volonté étant de passer un jour arguments en tant que simple tableau.

arguments.callee contient la référence de la fonction courante. Il s’agit, en quelque sorte, d’un this de la fonction lorsqu’elle n’est pas utilisée comme objet. Aussi, cet attribut permet de référencer une fonction anonyme, ou même une fonction nominative qui néanmoins, comme nous l’avons vu précédemment dans notre article sur les déclarations, n’est malheureusement pas référencée sous certains navigateurs comme Internet Explorer.

arguments.caller contient la référence de la fonction qui appelle la fonction courante, mais ne semble plus implémenté du tout par les navigateurs. Il faut, de toute façon, lui préférer la méthode Function.caller.

Cet attribut permet notamment de retrouver les attributs de classe, mais malheureusement pas d’instance, depuis une fonction imbriquée.

Function.length

A noter que les fonctions possèdent également un attribut length qui nous informe du nombre de paramètres définis par leur signature. Cet attribut remplace Function.arity, obsolète depuis JavaScript 1.8.6.

Cette propriété permet, par exemple, de contrôler le nombre d’arguments passés à la fonction.

Conclusion

Les fonctions sont de type varags car elles peuvent être appelées avec des arguments tout autre que les paramètres déclarés dans leurs signatures.

La variable arguments permet de récupérer facilement la liste des arguments passés à une fonction, et peut tout aussi facilement être couplée avec la méthode apply pour passer ces mêmes arguments à une autre fonction. Il ne faut toutefois pas perdre de vue qu’il ne s’agit pas tout à fait d’un Array et que certaines méthodes de cette dernière classe ne sont donc pas disponibles.

Dans notre prochain et dernier article sur les fonctions, nous examinerons quelques patterns indispensables à une utilisation quotidienne des fonctions.

2 réflexions au sujet de « Arguments et paramètres de fonctions en Javascript »

  1. Ping : Les fonctions en Javascript | The Dark Side Of The Web

  2. Ping : Appel et retour de fonctions en Javascript

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>