DEVENIR-WEBMASTER.COM Log In
 11
open

Les fonctions en Javascript

# Qu'est ce qu'une fonction open

Une fonction est un morceau de code écrit pour être exécuté sur demandes dans des conditions précises. L'exécution de la fonction retourne une valeur. Ainsi :

  1. L'écriture du code se fera dans une déclaration.
  2. Les demandes se feront dans des appels à la fonction.
  3. Les conditions seront fixées sous la formes de paramètres d'appel.
  4. Les valeurs retournées à chaque appel seront le plus souvent utilisées dans des variables, des conditions...etc

Il faut dès le départ faire la différence entre les paramètres utilisés au moment de la déclaration et ceux utilisés au moment d'un appel. Je vous donne ici les différentes terminologies que l'on peut rencontrer.

Paramètres utilisés à la déclarationParamètres utilisés à l'appel
Paramètres formelsParamètres effectifs
ParamètresArguments
Paramètres de déclarationParamètres d'appel

Dans les tuto j'utiliserai paramètres de déclaration et paramètres d'appel ça me parrait plus explicite.

Lorsqu'une fonction est appelée le code qu'elle contient s'exécute jusqu'à ce qu'un return provoque la sortie de la fonction.

Il peut ne pas y avoir de return. dans ce cas la fonction s'exécute jusqu'à la dernière instruction du bloc d'instructions.

Syntaxe

Exemples

Ci dessous la valeur de retour du premier appel est stockée dans une variable resultat. La valeur de retour du deuxième appel à addition() est passée directement en paramètre d'appel la fonction alert();.

Ci dessus on utilise une fonction alert() qui est fournie par le langage. On appelle cette catégorie de fonction des fonctions natives.

# Les paramètres open

Passage par copie des paramètres d'appel

Au moment d'un appel à une fonction les paramètres d'appels sont passés par copie dans une pile d'exécution. A chaque appel il y a un nouvel emplacement d'alloué dans la pile. C'est important de comprendre que la fonction travaille sur des copies locales des paramètres d'appels.

Ci dessous on pourrait croire que la variable i est incrémentée en "passant" dans la fonction. Ce n'est pas le cas !

Utilisation de la valeur de retour

Bien évidemment on peut récupérer le résultat de l'incrémentation en utilisant la valeur de retour de la fonction.

Un paramètre de déclaration est local à la fonction.

Les paramètres de déclarations ne sont pas visibles à l'extérieur de la fonction. Ci dessous le typeof index renvoie undefined car à cet endroit du programme index n'est pas visible.

Le typage dynamique des arguments d'appels

Vous l'avez peut être remarqué, au moment de la déclaration d'une fonction on donne la liste des paramètres de déclaration mais on ne précise pas leur type.

Ci dessous j'appelle deux fois la fonction ajouter(). Une première fois avec deux valeurs de type number et une deuxième fois avec deux valeurs de type string.

Dans le premier cas on va avoir une addition de number avec pour résultat 5. Dans le second cas une concaténation de chaîne avec pour résultat '23'.

# La portée des variables open

Si vous déclarez une variable à l'intérieur d'une fonction elle est locale à la fonction. On dit qu'elle a une portée limitée à la fonction. Elle n'est pas visible à l'extérieur de la fonction.

Si une variable est déclarée à l'extérieur d'une fonction elle est globale. Elle est visible dans tous les fichiers Javascript inclus dans la page web. Elle est visible à l'intérieur de toutes les fonctions.

Ci dessous la variable message est déclarée "deux fois". Même avec le même nom il faut voir les deux variables message comme des variables différentes. Je veux dire qu'elles sont dans des environnements différents.

Si vous demandez message dans la fonction dire_bonjour(), Javascript regarde d'abord si il la trouve dans l'environnement local à la fonction et il va prendre celle qui est égale à Bonjour.

Si vous demandez message à l'intérieur de la fonction dire_au-revoir(), Javascript regarde en premier dans l'environnement local. Il ne la trouve pas. Il va aller chercher celle qui est dans l'environnement global et qui est égale à Au revoir.

# Les fonctions anonymes open

Il n'est pas obligatoire en Javascript de donner un nom à une fonction au moment de la déclaration. C'est important de voir ce cas de figure car plus tard on va manipuler des documents HTML. C'est quand même notre but. Et on aura besoin de déclarer des fonctions de cette manière.

Pour appeler la fonction, une solution c'est de l'affecter à une variable et d'utiliser des parenthèses. C'est les parenthèses qui provoquent l'appel de la fonction. On dit aussi l'invocation de la fonction.

# Les fonctions récursives open

On parle de fonction récursive lorsque l'on programme une fonction qui s'appelle elle même. Ca peut surprendre mais c'est très utilisé pour parcourir des structures de données arborescentes. La structure de données de base en informatique est l'arborescence. Nos documents HTML ont des structures de données arborescentes, nos systèmes de fichiers aussi.

La récursivité est rendu possible par la présence d'une pile d'exécution dans laquelle Javascript empile un contexte d'exécution à chaque appel d'une fonction.

Ici je vais donner l'exemple classique du calcul d'une factorielle.

Empiler les appels et dépiler les résultats
Calcul de factorielle