return en JavaScript : renvoyer une valeur et sortir d'une fonction

return met fin à une fonction et renvoie sa valeur à l'appelant. Sans valeur, ou sans return du tout, la fonction renvoie undefined.
3 min de lecture
Believemy logo

Une fonction qui calcule quelque chose sans le rendre ne sert à rien : le résultat existe une fraction de seconde, puis disparaît avec elle. return est le seul chemin par lequel une valeur sort d'une fonction.

C'est aussi une instruction de sortie, et ce second rôle est celui qu'on exploite le moins alors qu'il rend le code beaucoup plus lisible.


Définition

return arrête immédiatement l'exécution de la fonction en cours et renvoie la valeur écrite à sa droite à l'endroit qui a fait l'appel. Tout ce qui suit dans le corps est abandonné, même dans la même accolade.

JAVASCRIPT
function remise(montant) {
  if (montant < 100) {
    return 0;              // sortie immédiate, la suite n'est pas lue
  }
  return montant * 0.1;
}

console.log(remise(50), remise(300));   // 0 30

Une function peut contenir autant de return que nécessaire. Le premier atteint gagne, les autres ne sont jamais évalués.


Sans return, la fonction renvoie undefined

Une fonction dont le corps se termine sans rencontrer de return renvoie undefined. C'est aussi le cas d'un return écrit seul, sans valeur, qu'on utilise justement pour sortir tôt sans rien communiquer.

JAVASCRIPT
function journaliser(message) {
  console.log(message);
}

console.log(journaliser("bonjour"));   // bonjour, puis undefined

Cette distinction explique un bug très fréquent chez les débutants : afficher une valeur avec console.log et croire l'avoir renvoyée. L'affichage sert la personne qui regarde l'écran, return sert le code qui appelle. Les deux n'ont aucun rapport.


Le piège du point-virgule automatique

JavaScript ajoute des points-virgules là où il pense qu'une instruction se termine. Avec return, la règle est stricte : rien ne peut passer à la ligne entre le mot-clé et la valeur.

JAVASCRIPT
function position() {
  return
  { x: 1 };
}

console.log(position());   // undefined

Le moteur a lu return; puis un bloc isolé qu'il a ignoré. Aucune erreur, aucun avertissement, seulement une valeur vide. C'est l'un des rares endroits du langage où un retour à la ligne change le sens du programme, et la raison pour laquelle la valeur commence toujours sur la même ligne que le mot-clé.

Bon à savoir

Dans une fonction async, return ne renvoie pas la valeur directement mais une Promise déjà résolue avec cette valeur. L'appelant doit donc l'attendre avec await avant de s'en servir.


Questions fréquentes

Question

Peut-on renvoyer plusieurs valeurs ?

Pas directement, mais un objet ou un tableau fait très bien l'affaire, et la Destructuration permet de les récupérer en une ligne du côté de l'appelant. L'objet est préférable dès qu'il y a plus de deux valeurs, parce qu'il les nomme au lieu de les ranger dans un ordre à retenir.


Question

Pourquoi mon return ne sort-il pas de la boucle ?

Parce qu'il ne sort pas d'une boucle, il sort d'une fonction. Écrit dans le rappel passé à Array.forEach(), il termine ce rappel pour l'élément en cours, exactement comme un continue, et le parcours reprend. Pour interrompre réellement un parcours, il faut une boucle for avec break, ou une méthode qui s'arrête d'elle-même comme Array.find().


Question

Faut-il un seul return par fonction ?

C'est une vieille règle héritée d'autres langages, et elle ne tient plus. Sortir tôt sur les cas particuliers, en haut de la fonction, évite d'imbriquer trois niveaux de conditions pour finir par une seule ligne utile. Le cas qui mérite qu'on s'arrête est celui d'une fonction longue dont les sorties sont dispersées : le problème n'est plus return, c'est la fonction, qui gagnerait à être découpée.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.