Javascript - Les fonctions

Juillet 2017

La notion de fonction

On appelle fonction un sous-programme qui permet d'effectuer
un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal.
Cette notion de sous-programme est généralement appelée fonction dans les langages autres que le Javascript
(toutefois leur syntaxe est généralement différente...). Les fonctions
permettent d'exécuter dans plusieurs parties du programme une série d'instructions,
cela permet une simplicité du code et donc une taille de programme minimale. D'autre part, une fonction
peut faire appel à elle-même, on parle alors de fonction récursive (il ne faut pas
oublier dans ce cas de mettre une condition de sortie au risque sinon de ne pas pouvoir arrêter le programme...).


Javascript contient des fonctions prédéfinies qui peuvent s'appliquer pour un ou plusieurs
types d'objets spécifiques, on appelle ces fonctions des méthodes.

La déclaration d'une fonction

Avant d'être utilisée, une fonction doit être définie car pour l'appeler
dans le corps du programme il faut que le navigateur la connaisse, c'est-à-dire qu'il
connaisse son nom, ses arguments et les instructions qu'elle contient. La définition d'une fonction
s'appelle "déclaration".
La déclaration d'une fonction se fait grâce au mot clé function selon la syntaxe suivante :

function Nom_De_La_Fonction(argument1, argument2, ...) {
liste d'instructions
}



Remarques:

  • le mot clé function est suivi du nom que l'on donne à la fonction
  • le nom de la fonction suit les mêmes règles que les noms de variables :
    • le nom doit commencer par une lettre
    • un nom de fonction peut comporter des lettres, des chiffres et les caractères _ et & (les espaces

ne sont pas autorisés!)


*
    • le nom de la fonction, comme celui des variables est sensible à la casse (différenciation entre les minuscules et majuscules)
  • Les arguments sont facultatifs, mais s'il n'y a pas d'arguments, les parenthèses doivent rester présentes
  • Il ne faut pas oublier de refermer les accolades





  • Le nombre d'accolades ouvertes (fonction, boucles et autres structures) doit être égal au nombre d'accolades fermées!
  • La même chose s'applique pour les parenthèses, les crochets ou les guillemets!


Une fois cette étape franchie, votre fonction ne s'exécutera pas tant que l'on ne fait pas appel à elle quelque part dans la page!

Appel de fonction

Pour exécuter une fonction, il suffit de faire appel à elle en écrivant son nom
(une fois de plus en respectant la casse) suivie d'une parenthèse ouverte (éventuellement des arguments)
puis d'une parenthèse fermée :

Nom_De_La_Fonction();



Remarques:

  • le point virgule signifie la fin d'une instruction et permet au navigateur de distinguer les différents blocs d'instructions
  • si jamais vous avez défini des arguments dans la déclaration de la fonction, il faudra veiller à les inclure

lors de l'appel de la fonction (le même nombre d'arguments séparés par des virgules!)




Veillez toujours à ce qu'une fonction soit déclarée avant d'étre appelée, sachant
que le navigateur traite la page de haut en bas (Pour éviter des erreurs de ce type on déclare généralement
les fonctions dans des balises SCRIPT situées dans l'en-tête de la page, c'est-à-dire entre les balises
<HEAD> et </HEAD>)




Grâce au gestionnaire d'événement onLoad (à placer dans la balise BODY)
il est possible d'exécuter une fonction au chargement de la page, comme par exemple l'initialisation
des variables pour votre script, et/ou le test du navigateur pour savoir si celui-ci est apte
à faire fonctionner le script. Il s'utilise de la manière suivante :

<HTML>
<HEAD>
<SCRIPT language="Javascript">
<!--
 
function Chargement() {
alert('Bienvenue sur le site');
}
 
//-->
</SCRIPT>
</HEAD>
<BODY onLoad="Chargement();" >
 
Code Javascript qui ne sert absolument à rien si ce n'est déranger vos visiteurs...
 
</BODY>
</HTML>

la fonction anonyme

on créé une fonction grâce l'opérateur function et que l'on appel fonction anonyme. Elle est en tout point similaire a une fonction classique,

Il existe trois principale façons d, utiliser une fonction anonyme.

Evenement

on associe frequement une fonction anonyme a un évènement crée dynamiquement. ,

document.getElementById('mon_element').onclick=function(param1,param2,event,this){ du code du code}


document.getElementById('mon_element').addEventListener('click', function(param1,param2,,this){ du code du code}, false);

déclaration de fonction avec variable

au lieux de déclarer une fonction en lui attribuant un nom on vas faire l'inverse en déclarant une variable en lui attribuant une fonction anonyme

var un_nom=function(){

du code du code du code
}


pour lancer la fonction il suffira d'appeler la varaible en ajoutant les parenthèses afin d’exécuter le contenu de la variable.

 un_nom()

IIFE (Immediately Invoked Function Expression)

l' IIFE permet de creer un espace de travail afin d’éviter le scope de variable au sein d'une page pour ce faire au chargement de la page on lance l'execution d'une fonction anonyme qui est conservé en mémoire.

(function() {
du code du code
})();

Fonctions fléchées


Les paramètres d'une fonction

Il est possible de passer des paramètres à une fonction, c'est-à-dire
lui fournir une valeur ou le nom d'une variable afin que la fonction puisse effectuer
des opérations sur ces paramètres ou bien grâce à ces paramètres.
Lorsque vous passez plusieurs paramètres à une fonction il faut les séparer par des virgules,
aussi bien dans la déclaration que dans l'appel et il faudra veiller à bien passer le bon
nombre de paramètres lors de l'appel au risque sinon de créer une erreur dans votre Javascript...


Imaginons que l'on veuille créer une page Web qui affiche une boîte de dialogue
(les boîtes de dialogues sont à éviter dans vos pages car elles sont énervantes,
mais c'est toutefois une manière simple d'apprendre le Javascript) qui affiche un texte différent
selon le lien sur lequel on appuie.

La méthode de base consiste à faire une fonction pour chaque texte à afficher :

<HTML>
<HEAD>
<SCRIPT language="Javascript">
<!--
 
function Affiche1() {
alert('Texte 1');
}
function Affiche2() {
alert('Texte2');
}
 
//-->
</SCRIPT>
</HEAD>
<BODY>
 
<A href="javascript:;" onClick="Affiche1();">Texte1</A>
<A href="javascript:;" onClick="Affiche2();">Texte2</A>
 
</BODY>
</HTML>



Ce qui donne ceci :

[javascript:; Texte1]

[javascript:; Texte2]


Il existe toutefois une methode plus "classe" qui consiste à créer
une fonction qui a comme paramètre le texte à afficher :

<HTML>
<HEAD>
<SCRIPT language="Javascript">
<!--
 
function Affiche(Texte) {
alert(Texte);
}
 
//-->
</SCRIPT>
</HEAD>
<BODY>
 
<A href="javascript:;" onClick="Affiche('Texte1');">Texte1</A>
<A href="javascript:;" onClick="Affiche('Texte2');">Texte2</A>
 
</BODY>
</HTML>



Ce qui donne ceci :

[javascript:; Texte1]

[javascript:; Texte2]



Résultat: Aucune différence visuellement mais vous n'avez plus qu'une seule fonction
qui peut vous afficher n'importe quel texte...

Travailler sur des variables dans les fonctions

Lorsque vous manipulerez des variables dans des fonctions, il vous arrivera de constater que la variable
retrouve sa valeur d'origine dès que l'on sort de la fonction, malgré toutes les affectations
faites au sein de celle-ci ...


Cela est dû à la portée des variables, c'est-à-dire selon qu'elles ont été
définies comme variables globales ou locales.

  • Une variable déclarée implicitement dans la fonction (non précédée du mot-clé var)

sera globale , c'est-à-dire accessible après exécution de la fonction
  • Une variable déclarée explicitement (précédée du mot-clé var)

sera locale , c'est-à-dire accessible uniquement dans la fonction, toute référence à

cette variable hors de la fonction provoquera une erreur (variable inconnue)...

Le mot-clé this

Lorsque vous faîtes appel à une fonction à partir d'un objet,
par exemple un formulaire, le mot clé this fait référence à

l'objet en cours et vous évite d'avoir à définir l'objet en tapant

window.objet1.objet2...

ainsi lorsque l'on passe l'objet en cours en paramètre d'une fonction, il
suffit
de taper nom_de_la_fonction(this) pour pouvoir manipuler cet objet à

partir de la fonction.


Pour manipuler les propriétés de l'objet il suffira de taper this.propriete

(où propriete représente bien sûr le nom de la propriété).

Définir des objets avec les fonctions

Les navigateurs ont leurs propres objets avec leur propriétés respectives. Il
est toutefois possible de créer ses propres objets avec les propriétés
qu'on leur définit.

Imaginons que l'on veuille par exemple créer un objet arbre avec ses propriétés :

  • type
  • taille
  • age




Il est possible de créer l'objet Arbre en créant une fonction
dont le nom est Arbre et qui définit les propriétés de l'objet
en cours grâce au mot-clé this, en passant
en paramètre chacune des propriétés :

function Arbre(Type, Taille, Age) {
this.Type = Type;

this.Taille = Taille;

this.Age = Age;

}




Grâce au mot-clé new, il va être possible
de créer des instances de l'objet Arbre (c'est-à-dire
des objets possédant les propriétés de l'objet Arbre) :

Arbre1 = new Arbre("peuplier", 14, 20)


On peut ainsi créer autant d'instances que l'on désire...


Il est de plus possible d'ajouter un objet existant en tant que propriété d'un autre objet.
Imaginons que vous créiez un objet proprietaire :

function Proprietaire(Nom, Prenom) {
this.Nom = Nom;
this.Prenom = Prenom;
}



Définissons maintenant l'objet Arbre comme suit :

function Arbre(Type, Taille, Age, Proprietaire) {
this.Type = Type;
this.Taille = Taille;
this.Age = Age;
this.Proprietaire = Proprietaire;
}



Il est alors possible de trouver le nom du propriétaire d'un arbre :

Arbre.Proprietaire.Nom


Ainsi que de le modifier si jamais le propriétaire change :

Arbre1.Proprietaire.Nom = 'Dupont';


Arbre1.Proprietaire.Prenom = 'René';

A voir également


Ce document intitulé «  Javascript - Les fonctions  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.