Skip to content

Les fonctions en JavaScript

Introduction

L'élément le plus important dans le langage JavaScript, c'est la fonction. Il faut donc maîtriser les fonctions en JavaScript : les différentes façons de les créer, et les différentes façon de les appeler (on dit aussi les invoquer ou encore les exécuter).

Une fonction, en JavaScript est un « citoyen de première classe » : il s'agit d'une valeur comme une autre, qui peut être stockée dans une variable, passée en paramètre à une autre fonction, ou être retournée par une fonction.

Une fonction est un objet (cf. plus loin pour les types en JavaScript), qui a un super pouvoir : celui de pouvoir être invoqué. On invoque une fonction en ajoutant des parenthèses à la fin de son nom.

Pour créer une fonction, il y a 3 possibilités (en fait 4, mais la quatrième est déconseillée, je n’en parlerai pas), avec chacune des nuances que nous verrons.

Déclaration de fonction

javascript
function createMovie(id, title, frenchTitle) {
  return {
    imdbID: id,
    title,
    frenchTitle,
  }
}
  • Ceci est une déclaration de fonction ;
  • createMovie est une fonction déclarée avec le mot-clé function (il existe d'autres façons de créer des fonctions) ;
  • elle a 3 paramètres (une fonction peut attendre de 0 à Infinity paramètre, il est fortement déconseillé de dépasser 3) ;
  • elle renvoie un objet (ce qui n’est pas du tout une obligation, elle peut ne rien renvoyer - et donc renvoyer la valeur undefined, ou renvoyer une primitive).

Expression de fonction

javascript
const createMovie = function createMovie(id, title, frenchTitle) {
  return {
    imdbID: id,
    title,
    frenchTitle,
  }
}
  • Ici, il n'y a pas de déclaration de fonction
  • Il y a une déclaration de variable createMovie
  • à droite de l’opérateur d’affectation (=), il y a une expression de fonction
  • elle a 3 paramètres
  • elle renvoie un objet

Fonction fléchée

javascript
function createMovie(id, title, frenchTitle) {
  return {
    imdbID: id,
    title,
    frenchTitle,
  }
}
  • Ici, il n'y a pas de déclaration de fonction ;
  • il y a une déclaration de variable createMovie ;
  • à droite de l’opérateur d’affectation (=), il y a une (expression de) fonction fléchée ;
  • elle a 3 paramètres ;
  • elle renvoie un objet.

Quelques précisions pour les fonctions fléchées

Pour les fonctions fléchées et uniquement pour les fonctions fléchées :

  • les parenthèses autour des paramètres ne sont pas obligatoires s’il y a un et un seul paramètre
  • les accolades et le mot-clé return ne sont pas obligatoires s’il n’y a qu’une instruction :
javascript
function noop() {} // parenthèses obligatoires si aucun paramètre, accolades obligatoires s’il n’y a pas d’instruction
const add40 = n => 40 + n // parenthèses facultatives si un et un seul paramètre, accolades et return facultatif si une seule instruction

Attention dans certains cas :

javascript
var createMovie = (id, title, frenchTitle) => {
  id: id,
  title: title,
  frenchTitle: frenchTitle
} // Syntax Error !!!

Ici, les accolades signifient « début de corps de fonction », et ne jouent pas le rôle d’initiateur d’objet ! Il faut donc soit être plus verbeux...

javascript
function createMovie(id, title, frenchTitle) {
  return {
    id,
    title,
    frenchTitle
  }
}

... soit entourer les accolades de parenthèses :

javascript
function createMovie(id, title, frenchTitle) {
  return {
    id,
    title,
    frenchTitle
  }
}

D’autres subtilités

Il existe encore d’autres subtilités concernant les différences entre les fonctions et les fonctions fléchées que nous n’aurons pas le temps de voir dans ce module. Pour bien comprendre ces subtilités, il faut comprendre comment fonctionne le mot-clé this en JavaScript.