J'utilise Netbeans pour ajouter des commentaires de type professionnel à chaque fonction, j'écris. Je commence donc chacun d'eux par /**
, puis j'appuie sur Enter
pour laisser Netbeans remplir le schéma de commentaires par défaut pour la fonction suivante.
Jusqu'à présent, je n'utilisais cela que pour le langage PHP et dans ce cas, Netbeans ajoutait toujours une @returns {type}
partie dans le schéma de commentaire uniquement, si la fonction PHP suivante incluait vraiment une return
déclaration. Sur les soi-disant «procédures» (fonctions qui ne renvoient aucune valeur), cette partie manquait.
Aujourd'hui, j'ai essayé la même chose pour la fonction Javascript et Netbeans a ajouté une @returns {undefined}
partie au schéma de commentaire même si la fonction suivante ne renvoie rien.
Cela m'a dérouté. Netbeans suggère-t-il ainsi que chaque fonction Javascript doit renvoyer quelque chose? Que devrais-je faire? Ignorer (ou supprimer) cette partie du schéma de commentaire ou suivre la suggestion (si c'est une suggestion) et ajouter return false;
à la fin de cette fonction, bien que cela ne me serve à rien?
la source
undefined
. Dans de nombreuses langues, le résultat de la dernière déclaration est renvoyé (plus utile, IMO). Celles-ci sont appelées retours implicites .Réponses:
La réponse courte est non.
La vraie réponse est oui: le moteur JS doit être notifié qu'une fonction a terminé son activité, ce qui est fait par la fonction renvoyant quelque chose. C'est aussi pourquoi, au lieu de «terminé» , une fonction est dite «retournée» .
Une fonction qui n'a pas d'instruction de retour explicite retournera
undefined
, comme une fonction C (++) qui n'a pas de valeur de retour est dite (et sa signature le reflète) pour retournervoid
:De plus, dans JS, comme dans la plupart des langages, vous êtes libre d'ignorer simplement la valeur de retour d'une fonction, ce qui est énormément fait:
À un niveau très bas, le retour se traduit par une sorte de saut. Si une fonction ne renvoie vraiment rien du tout, il n'y aurait aucun moyen de savoir quoi et quand appeler la fonction suivante, ou d'appeler des gestionnaires d'événements, etc.
Donc, pour récapituler: non, une fonction JS n'a pas besoin de renvoyer quoi que ce soit en ce qui concerne votre code. Mais en ce qui concerne les moteurs JS: une fonction renvoie toujours quelque chose, que ce soit explicitement via une
return
instruction, ou implicitement. Si une fonction retourne implicitement, sa valeur de retour sera toujours indéfinie.la source
void
, il ne renvoie rien, mais sa signature reflète cela à travers levoid
type de retour.return;
n'est probablement utile que si vous devez revenir plus tôt. l'écriturereturn undefined;
peut produire des résultats différents siundefined
elle se résout à une valeur différente. La plupart des navigateurs (sinon tous) généreront une erreur lorsque vous tenterez de réaffecter undefined, mais en théorie, il est possible que voici un exemple utilisant node.jsvoid
d'autres langages (comme C), où vous pouvez avoir des fonctions commevoid do_someting(int *arg)
, mais vous ne pouvez pas avoir de variable avec le typevoid
. En C, cevoid
n'est pas vraiment un type, donc ces fonctions ne renvoient rien, elles sautent justeNon, le retour n'est pas nécessaire.
Mais aucun retour ne retourne le
undefined
la source
Non, ils ne le font pas. Il est vrai qu'au fond de la spécification, ceux-ci sont tous légèrement différents:
... mais le résultat de l' appel chacun d'eux est le même:
undefined
. Donc, en termes pragmatiques:return
, vous pouvez simplement laisser l'exécution du code "tomber à la fin" de la fonctionundefined
, en particulier, vous venez d'écrirereturn;
return;
ou s'est terminée parreturn undefined;
; ils ont tous exactement la même apparence à votre code d'appelConcernant la spécification: plus précisément, lorsque l'exécution d'une fonction tombe à la fin, dans la spécification, c'est un achèvement "normal"; mais
return;
etreturn value;
sont tous deux des "retournements" complets avec une valeur associée (undefined
), qui est (très légèrement) différente. Mais la différence est éliminée par la sémantique de l' appel d'une fonction , qui dit:Il n'y a donc aucune différence que vous pouvez observer dans le code.
la source
Non, vous n'êtes pas obligé de retourner quelque chose pour chaque fonction. Il est facultatif et dépend de la façon dont vous écrivez votre logique de code.
la source