Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Les fonctions définies dans le langage sont appelées fonctions prédéfinies ou fonctions prêtes
à l’emploi car il nous suffit de les appeler pour nous en servir.
Pour être tout à fait précis, les fonctions prédéfinies en JavaScript sont des méthodes. Une
méthode est tout simplement le nom donné à une fonction définie au sein d’un objet. Pour le
moment, nous allons considérer que ce sont simplement des fonctions.
1
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
Par exemple, le JavaScript dispose d’une fonction nommée random() (qui appartient à
l’objet Math que nous étudierons plus tard) et qui va générer un nombre décimal aléatoire
entre 0 et 1 ou encore d’une fonction replace() (qui appartient à l’objet String) qui va nous
permettre de chercher et de remplacer une expression par une autres dans une chaine de
caractères.
Code HTML
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<link rel="stylesheet" href="cours.css">
<script src='cours.js' ></script>
</head>
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
<p id='p1'></p>
<p id='p2'></p>
</body>
</html>
Code JS
let prez = 'Bonjour, je suis Mohamed';
2
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
RESULTAT
Titre principal
Un paragraphe
0.9470418728056098
L’intérêt principal des fonctions prédéfinies est de nous permettre de réaliser des opérations
complexes de manière très simple : en les appelant, tout simplement.
En effet, vous devez bien comprendre que derrière ces noms de fonctions se cachent des
codes parfois longs et complexes qui vont être exécutés lorsqu’on appelle la fonction et qui
vont permettre de réaliser une opération précise (générer un nombre aléatoire, etc.).
En plus de cela, le code d’une fonction est réutilisable : cela veut dire qu’on va pouvoir
appeler une même fonction autant de fois qu’on le souhaite afin qu’elle accomplisse plusieurs
fois la même opération.
Les arguments d’une fonction sont des valeurs qu’on va passer à notre fonction afin
qu’elle fonctionne normalement ou pour préciser le comportement qu’elle doit
adopter. Certaines fonctions ne vont pas nécessiter d’arguments, d’autres vont avoir
besoin d’un argument, d’autres de deux, etc. De plus, certains arguments vont être
obligatoires tandis que d’autres vont être facultatifs.
Par exemple, dans le cas de notre fonction replace(), il va falloir fournir en premier argument
l’expression à rechercher et à remplacer et en second argument l’expression de remplacement
pour que la fonction marche correctement.
3
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
2. Les fonctions personnalisées
Pour définir une fonction, on va utiliser le mot clef function suivi du nom que l’on souhaite
donner à notre fonction puis d’un couple de parenthèses dans lesquelles on peut
éventuellement définir des paramètres et finalement d’un couple d’accolades dans lesquelles
on va placer le code de notre fonction.
La syntaxe d'une déclaration de fonction est la suivante :
function nom_de_la_fonction(arguments) {
Une fois notre fonction définie, on n’aura plus qu’à l’appeler pour l’utiliser.
L'appel d'une fonction se fait le plus simplement du monde par le nom de la fonction (avec les
parenthèses).
Soit par exemple nom_de_la_fonction();
Il faudra veuiller en toute logique (car l'interpréteur lit votre script de haut vers le bas) que
votre fonction soit bien définie avant d'être appelée.
4
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
Voyons immédiatement comment faire en pratique.
Code HTML
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
<p id='p1'></p>
<p id='p2'></p>
</body>
</html>
Code JS
/*On définit deux fonctions personnalisées.
*La fonction aleatoire() se sert de la fonction (méthode) random().
*La fonction multiplication() multiplie deux nombres entre eux.
*On utilise une instruction return pour que nos fonctions, une fois appelées,
*retournent le résultat de leur calcul afin qu'on puisse utiliser ce résultat*/
function aleatoire(){
return Math.random() * 100;
}
Titre principal
Un paragraphe
40.592362809005245
5 * 10 = 50
5
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
Les noms des fonctions suivent les mêmes règles que ceux des variables. Vous pouvez donc
donner le nom que vous voulez à votre fonction du moment que celui-ci commence par une
lettre, ne contient pas d’espace ni de caractères spéciaux et n’est pas déjà pris nativement par
le JavaScript.
Ensuite, on place le résultat dans le paragraphe portant l’id='p1' du fichier HTML faisant
appel au script JavaScript.
Ce premier exemple de création de fonction a pour but de vous montrer qu’on va pouvoir
exécuter une fonction à l’intérieur d’une autre fonction sans problème.
Notez qu’on utilise également ici pour nos deux fonctions une instruction return. Cette
instruction va permettre à nos fonctions de retourner une valeur qu’on va ensuite pouvoir
manipuler. Nous allons l’étudier en détail par la suite.
Ici, il va donc falloir passer ces deux nombres à notre fonction lorsqu’on l’appelle afin qu’elle
puisse les multiplier et renvoyer le résultat. Lors de l’appel, nous allons donc passer ces
nombres en arguments de notre fonction, entre les parenthèses.
Cependant, on est ici face à un problème : comment expliciter le fait que notre fonction doit
multiplier deux nombres entre eux lorsqu’on ne les connait pas à l’avance ?
Nous allons pour cela utiliser ce qu’on appelle des paramètres. Les paramètres des fonctions
sont des « prête-noms » qui seront remplacés par les valeurs effectives passées en argument
lorsqu’on appelle notre fonction.
6
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
L’idée ici est qu’on va pouvoir donner n’importe quel nom à nos paramètres : je les appelle ici
« nombre1 » et « nombre2 » mais je pourrais aussi bien les appeler « Salah » et « Math » ou «
x » et « y ». L’important va être de conserver les mêmes noms entre les parenthèses et dans le
code de la fonction.
Une nouvelle fois, lorsqu’on appelle ensuite notre fonction, les arguments passés (c’est-à-dire
les valeurs effectives) vont venir se substituer aux paramètres.
Bien évidemment, les fonctions qu’on vient de créer ne sont pas très utiles ici. Cependant, il
faut bien commencer avec quelque chose et par maitriser la base pour créer des choses de plus
en plus complexes ! Un peu de patience : on y arrive.
Voici un petit résumé des choses importantes à retenir à votre niveau sur les fonctions :
Les fonctions sont des blocs de code nommés et réutilisables et dont le but est
d’effectuer une tâche précise ;
Pour exécuter le code d’une fonction, il faut l’appeler. Pour cela, il suffit d’écrire son
nom suivi d’un couple de parenthèses en passant éventuellement des arguments dans
les parenthèses ;
Si une fonction a besoin qu’on lui passe des valeurs pour fonctionner, alors on définira
des paramètres lors de sa définition. Lors de son appel, on lui passera des arguments
qui prendront la place des arguments.
7
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
En JavaScript, il n’existe que deux espaces de portée différents : l’espace global et l’espace
local.
Ici, vous devez bien retenir la chose suivante : une variable définie dans l’espace global d’un
script va être accessible à travers tout le script, même depuis une fonction. En revanche, une
variable définie dans une fonction n’est accessible que dans cette même fonction et ne peut
pas être manipulée depuis l’espace global du script.
Cette notion de portée est une notion qu’on retrouve dans de nombreux langages
informatiques. La portée permet de « protéger » certains codes et certaines variables en les
rendant inaccessibles depuis l’extérieur. Cela permet de renforcer la sécurité d’un script et sa
stabilité dans le cas où on ne voudrait pas qu’un utilisateur puisse modifier la valeur d’une
variable depuis l’extérieur pour des raisons de cohérence et de logique du script.
Code HTML
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
<p id='p1'></p>
<p id='p2'></p>
8
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
<p id='p3'></p>
<p id='p4'></p>
<p id='p5'></p>
</body>
</html>
JS
//On déclare deux variables globales
let x = 5;
var y = 10;
//On définit une première fonction qui utilise les variables globales
function portee1(){
document.getElementById('p1').innerHTML =
'Depuis portee1() : <br>x = ' + x + '<br>y = ' + y;
}
//On définit une deuxième fonction qui définit des variables locales
function portee2(){
let a = 1;
var b = 2;
document.getElementById('p2').innerHTML =
'Depuis portee2() : <br> a = ' + a + '<br>b = ' + b;
}
//On définit une troisième fonction qui défnit également des variables locales
function portee3(){
let x = 20;
var y = 40;
document.getElementById('p3').innerHTML =
'Depuis portee3() : <br>x = ' + x + '<br>y = ' + y;
}
//On tente d'afficher des variables globales puis locales depuis l'espace global
document.getElementById('p4').innerHTML =
'Depuis l\'espace global : <br>x = ' + x + '<br>y = ' + y;
document.getElementById('p5').innerHTML =
'Depuis l\'espace global : <br>a = ' + a + '<br>b = ' + b;
RESULT
Titre principal
Un paragraphe
Depuis portee1() :
x=5
y = 10
9
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
Depuis portee2() :
a=1
b=2
Depuis portee3() :
x = 20
y = 40
Dans ce script, on commence par déclarer et par initialiser deux variables let x et var y dans
l’espace global de notre script et en utilisant la nouvelle notation avec let et l’ancienne
avec var.
Pour cette leçon, je vais utiliser à chaque fois les deux notations afin d’illustrer les différences
subtiles liées à la portée entre ces deux façons de déclarer des variables.
Ensuite, nous allons créer trois fonctions qui vont utiliser des variables globales ou définir
leurs propres variables. Notre fonction portee1() utilise par exemple nos variables let x et var
y. Comme ces variables ont été déclarées dans l’espace global, elles sont donc accessibles et
utilisables dans la totalité du script et notamment dans des fonctions.
10
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
Ici, vous devez bien comprendre que les variables let x globale et let x locale, bien qu’elles
possèdent le même nom, sont deux entités totalement différentes (et de même pour var
y globale et locale).
Dans ce cas-là, notre fonction va utiliser les variables définies localement plutôt que celles
définies dans l’espace global.
De plus, comme les variables locales et globales ne sont pas les mêmes entités, elles vont agir
indépendamment et ainsi modifier la valeur de let x locale ne modifiera pas la valeur de la
variable globale et inversement.
On voit bien cela lorsqu’on tente d’afficher les valeurs de let x et de var y depuis l’espace
global : ici, ce sont les variables globales qui sont utilisées prioritairement et on voit que les
valeurs qu’elles contiennent n’ont pas été modifiées par la fonction portee3().
Finalement, on essaie d’afficher les valeurs de nos variables let a et var b définies localement
depuis l’espace global. Comme ces variables sont locales, elles ne sont pas accessibles depuis
l’espace global et une erreur va être émise par le JavaScript dans ce cas.
Dans l’exemple précédent, on n’a pu observer aucune différence de comportement entre une
variable déclarée avec la syntaxe let et une variable déclarée avec var en JavaScript.
Il existe pourtant une différence de portée qu’on va pouvoir observer lors de la définition de
variables locales. En effet, lorsqu’on utilise la syntaxe let pour définir une variable à
l’intérieur d’une fonction en JavaScript, la variable va avoir une portée dite « de bloc » : la
variable sera accessible dans le bloc dans lequel elle a été définie et dans les blocs que le bloc
contient.
En revanche, en définissant une variable avec le mot clef var dans une fonction, la variable
aura une portée élargie puisque cette variable sera alors accessible dans tous les blocs de la
fonction. Prenons immédiatement un exemple pour bien comprendre cela :
Code HTML
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
11
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
</head>
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
<p id='p1'></p>
<p id='p2'></p>
<p id='p3'></p>
<p id='p4'></p>
</body>
</html>
Code JS
function portee1(){
let x = 1;
var y = 2;
if(true){
let x = 5; //Variable différente
var y = 10; //Même variable qu'au dessus
document.getElementById('p1').innerHTML = 'x (dans if) = ' + x;
document.getElementById('p2').innerHTML = 'y (dans if) = ' + y;
}
document.getElementById('p3').innerHTML = 'x (hors if) = ' + x;
document.getElementById('p4').innerHTML = 'y (hors if) = ' + y;
}
portee1();
RESULT
Titre principal
Un paragraphe
x (dans if) = 5
y (dans if) = 10
x (hors if) = 1
y (hors if) = 10
Ici, on crée une fonction portee1() qui contient deux variables let x et var y ainsi qu’une
condition if dont le code va toujours être exécuté car son test est toujours validé (true est
toujours évalué… à true).
Dans la condition, on définit à nouveau deux variables let x et var y avec des valeurs
différentes. Ici, la variable let x définie va bien représenter une entité différente de celle
définie en dehors de la condition. En revanche, ça ne va pas être le cas pour var y : dans ce
cas-là, on redéfinit la même variable !
Lorsqu’on affiche les valeurs des variables à l’intérieur et en dehors de la boucle, on se rend
bien compte que nos deux variables let x sont bien différentes et stockent bien des valeurs
différentes tandis que notre variable var y a juste été redéfinie.
12
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
Je le répète encore une fois ici : aujourd’hui, vous devriez toujours utiliser la nouvelle syntaxe
de déclaration des variables en JavaScript utilisant le mot clef let. Cependant, je dois vous
présenter les variables var car de nombreux sites et développeurs continuent de les utiliser.
Par ailleurs, notez qu’il est considéré comme une mauvaise pratique de déclarer plusieurs
variables dans différents espaces en utilisant un même nom car cela peut poser des problèmes
évidents de clarté et de lisibilité du code. On essaiera donc tant que possible d’éviter de faire
cela.
Une valeur de retour est une valeur renvoyée par une fonction une fois que celle-ci a terminé
son exécution.
Une valeur de retour est une valeur unique qui va être renvoyée par la fonction après son
exécution et qu’on va pouvoir récupérer pour la manipuler dans notre script.
Certaines fonctions prédéfinies vont renvoyer une valeur de retour tandis que d’autres ne vont
pas en renvoyer.
Il est toujours très utile de savoir si une fonction prédéfinie en JavaScript va renvoyer une
valeur ou pas et quel type de valeur la fonction va renvoyer puisque cela va nous permettre de
savoir quoi faire après l’exécution de la fonction et d’éventuellement recueillir la valeur de
retour pour effectuer différentes opérations.
Par exemple, certaines fonctions JavaScript renvoient le booléen true si elles ont réussi à
effectuer leur tâche ou false en cas d’échec. Dans ce cas, on va pouvoir utiliser une condition
autour de ces fonctions pour prendre en charge et donner des instructions en cas d’échec de
notre fonction.
Dans le cas de fonctions personnalisées, nous allons devoir décider si notre fonction va
renvoyer une valeur ou pas.
Pour que nos fonctions renvoient une valeur, il va falloir utiliser une instruction return. Cette
instruction va nous permettre de retourner le résultat de la fonction ou une valeur de notre
13
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
choix qu’on va ensuite pouvoir soit manipuler immédiatement soit stocker dans une variable
pour effectuer différentes opérations avec cette valeur.
HTML
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
<p id='p1'></p>
<p id='p2'></p>
</body>
</html>
JS
let prez = 'Bonjour, je suis Mohamed';
/*On récupère la valeur renvoyée par replace() qu'on place dans une
*variable nommée let resultatReplace*/
let resultatReplace = prez.replace('jour', 'soir');
/*La fonction prompt() ouvre une boite de dialogue qui permet à l'utilisateur
*d'envoyer des données. Ici, on demande deux nombres à l'utilisateur et on
14
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
*les place dans les variables nombre1 et nombre2. On les utilise ensuite
*comme arguments de notre fonction div()*/
/***let nombre1 = prompt('Entrez un premier nombre');
let nombre2 = prompt('Entrez un deuxième nombre');***/
/*On exécute notre fonction en lui passant les nombres envoyés en argument et
*on affiche le résultat dans le paragraphe p id='p2'*/
/***let resultatDiv = div(nombre1, nombre2);
document.getElementById('p2').innerHTML = resultatDiv;***/
RESULT
Titre principal
Un paragraphe
Bonsoir, je suis Mohamed SALAH
Dans cet exemple, on commence par utiliser la fonction JavaScript prédéfinie replace() en
utilisant la syntaxe prez.replace(). Vous n’avez pas besoin de comprendre cette syntaxe pour
le moment mais pour faire simple vous pouvez retenir qu’on a besoin d’une chaine de
caractères pour exécuter replace() et cette chaine de caractères est ici contenue dans notre
variable prez.
En dessous, on crée une fonction div() dont le rôle est de diviser un nombre par un autre.
Dans le code de notre fonction, on isole le cas où le dénominateur est égal à 0. Dans ce cas-là,
notre fonction renvoie la chaine « division par 0 impossible ». Dans tous les autres cas, notre
fonction renvoie le résultat de la division.
Finalement, on demande aux utilisateurs de nous envoyer deux nombres qu’on passera en
arguments de notre fonction div(). Pour cela, on utilise une fonction prompt(). Cette fonction
ouvre une boite de dialogue et permet aux utilisateurs de nous envoyer des données.
15
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
16
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, user-scalable=no">
<link rel="stylesheet" href="cours.css">
<script src='cours.js' async></script>
</head>
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
</body>
</html>
JS
let alerte = function(){
alert('Alerte exécutée par une fonction anonyme');
};
17
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
<title>Cours JavaScript</title>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, user-scalable=no">
<link rel="stylesheet" href="cours.css">
<script src='cours.js' async></script>
</head>
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
</body>
</html>
JS
/*Code commenté pour éviter une exéuction intempestive (ouverture des boites d'alerte). Enlevez le
commentaire pour qu'il fonctionne normalement
*/
RESULT
Titre principal
Un paragraphe
Vous pouvez noter deux choses à propos des fonction auto-invoquées. Tout d’abord, vous
devez savoir que la notion d’auto-invocation n’est pas réservée qu’aux fonctions anonymes :
on va tout à fait pouvoir auto-invoquer une fonction qui possède un nom. Cependant, en
pratique, cela n’aura souvent pas beaucoup d’intérêt (puisque si une fonction possède un nom,
on peut tout simplement l’appeler en utilisant ce nom).
Ensuite, vous devez bien comprendre que lorsqu’on auto-invoque une fonction, la fonction
s’exécute immédiatement et on n’a donc pas de flexibilité par rapport à cela : une fonction
auto-invoquée s’exécutera toujours juste après sa déclaration.
5. Exécuter une fonction anonyme lors du déclenchement d’un évènement
On va enfin également pouvoir rattacher nos fonctions anonymes à ce qu’on appelle des «
gestionnaires d’évènements » en JavaScript.
Le langage JavaScript va en effet nous permettre de répondre à des évènements, c’est-à-dire
d’exécuter certains codes lorsqu’un évènement survient.
Le JavaScript permet de répondre à de nombreux types d’évènements : clic sur un élément,
pressage d’une touche sur un clavier, ouverture d’une fenêtre, etc.
Pour indiquer comment on veut répondre à tel évènement, on utilise des gestionnaires
d’évènements qui sont des fonctions qui vont exécuter tel code lorsque tel évènement
survient.
Les évènements vont faire l’objet d’une prochaine partie et je ne veux pas trop en parler pour
le moment. Notez simplement qu’on va pouvoir passer une fonction anonyme à un
18
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
gestionnaire d‘évènement qui va l’exécuter dès le déclenchement de l’évènement que le
gestionnaire prend en charge.
HTML
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, user-scalable=no">
<link rel="stylesheet" href="cours.css">
<script src='cours.js' async></script>
</head>
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
<p id='p1'>Paragraphe 1</p>
<p id='p2'>Paragraphe 2</p>
</body>
</html>
JS
//Représentent nos paragraphes p id='p1' et p id='p2'
let para1 = document.getElementById('p1');
let para2 = document.getElementById('p2');
19
Ch 3. LES FONCTIONS EN JAVASCRIPT 2022
Pour clore cette partie, j’aimerais également vous présenter des fonctions qui possèdent une
structure particulière et qu’on appelle fonctions récursives.
Une fonction récursive est une fonction qui va s’appeler elle-même au sein de son code.
Tout comme pour les boucles, les fonctions récursives vont nous permettre d’exécuter une
action en boucle et jusqu’à ce qu’une certaine condition de sortie soit vérifiée.
HTML
<!DOCTYPE html>
<html>
<head>
<title>Cours JavaScript</title>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, user-scalable=no">
<link rel="stylesheet" href="cours.css">
<script src='cours.js' async></script>
</head>
<body>
<h1>Titre principal</h1>
<p>Un paragraphe</p>
<p id='p1'></p>
</body>
</html>
JS
function decompte(t) {
if (t > 0) {
document.getElementById('p1').innerHTML += t + '<br>';
return decompte(t - 1);
}else{
return t;
}
};
decompte(7);
RESULT
Titre principal
Un paragraphe
7
6
5
4
3
2
1
Ici, notre fonction decompte() est une fonction récursive : elle va s’appeler elle-même dans
son code. La fonction prend ici un nombre en argument. Si ce nombre est strictement positif,
il est affiché dans le paragraphe p id='p1' et la fonction est de nouveau exécutée en enlevant 1
à la valeur passée précédemment et cela jusqu’à arriver à 0.
20