302 votes

Pourquoi dois-je utiliser un point-virgule après chaque fonction en javascript ?

J'ai vu différents développeurs inclure des points-virgules après les fonctions en javascript et d'autres non. Quelle est la meilleure pratique ?

function weLikeSemiColons(arg) {
   // bunch of code
};

o

function unnecessary(arg) {
  // bunch of code
}

458voto

CMS Points 315406

Point-virgule après déclarations de fonctions sont pas nécessaire .

La grammaire d'un FunctionDeclaration est décrit dans la spécification comme ceci :

function Identifier ( FormalParameterListopt ) { FunctionBody }

Il n'y a pas de point-virgule grammaticalement requis, mais on peut se demander pourquoi ?

Les points-virgules servent à séparer déclarations l'un de l'autre, et un FunctionDeclaration n'est pas un déclaration .

FunctionDeclarations sont évalués avant le code entre en exécution, levage est un mot courant pour expliquer ce comportement.

Les termes "déclaration de fonction" et "déclaration de fonction" sont souvent utilisés à tort de manière interchangeable, car aucune déclaration de fonction n'est décrite dans la spécification ECMAScript. Toutefois, certaines implémentations incluent une déclaration de fonction dans leur grammaire, notamment Mozilla, mais là encore, il s'agit d'un système non standard.

Cependant, les points-virgules sont toujours recommandés lorsque vous utilisez FunctionExpressions . Par exemple :

var myFn = function () {
  //...
};

(function () {
  //...
})();

Si vous omettez le point-virgule après la première fonction dans l'exemple ci-dessus, vous obtiendrez des résultats totalement indésirables :

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

La première fonction sera exécutée immédiatement, car les parenthèses qui entourent la seconde seront interprétées comme la fonction Arguments d'un appel de fonction.

Lectures recommandées :

2 votes

Modifié pour clarifier, cet article parle de expressions de fonctions

1 votes

Je ne connais pas très bien l'ECMA, mais c'est la norme que j'utilise également. Bonne remarque. La plupart des tutoriels que je vois en ligne et des exemples de code que je télécharge utilisent cette norme, et je m'y suis donc adapté.

2 votes

Une partie de la confusion ici peut être influencée par le manque d'un bon mot anglais pour "permitted because it will be ignored". Nous nous rabattons sur le terme "facultatif", mais il est trompeur car il suggère que le fait de ne pas inclure un point-virgule après une déclaration relève de la même catégorie que le fait de ne pas inclure un point-virgule après une déclaration. Ce dernier est optionnel dans un sens complètement différent : il est là parce que l'analyseur syntaxique va ajoutez le point-virgule manquant que vous avez omis alors que dans ce cas, c'est parce que l'analyseur syntaxique va ignorez le point-virgule que vous avez inclus . En d'autres termes, si l'un est facultatif, l'autre l'est aussi. huit .

41voto

Gabe Moothart Points 12400

Je les utilise après les déclarations de fonctions en tant que variables :

var f = function() { ... };

mais pas selon des définitions de style classique :

function f() {
    ...
}

0 votes

NetBeans, ainsi que d'autres IDE, aiment voir un point-virgule après une fonction en tant que variable telle que this.animaton_fun = function () { ... } ;

10 votes

Mais - pour le questionneur - pourquoi ?

0 votes

Cela aide lors de l'étape de construction. Quand un uglifier script voit un point-virgule, il n'a pas besoin d'ajouter un saut de ligne au fichier de sortie, s'il ne le fait pas, un saut de ligne sera généré et le fichier sera légèrement plus grand.

22voto

David Hedlund Points 66192

JS Lint est la convention de-facto, et elle dit qu'il ne faut pas de point-virgule après le corps de la fonction. Voir le "Point-virgule" section.

13 votes

J'ai été le témoin direct d'une fonction qui a échoué à cause de l'absence de point-virgule. Je ne suis pas du tout d'accord pour dire que l'absence de point-virgule est une convention. Dans 99,99 % des cas, il n'y a pas de problème, mais dans certaines situations, j'ai remarqué qu'IE était incapable d'interpréter le JavaScript sans le point-virgule.

8 votes

Ma réponse ne concerne que les définitions de fonctions, comme dans les deux exemples de la question. Dans ces cas, il n'est pas nécessaire d'ajouter un point-virgule à la fin de la définition de la fonction. tout navigateur, dans tout situation. Je suppose que vous pensez aux expressions de fonctions. C'est un sujet complètement différent, qui n'a pas été abordé dans la question initiale.

0 votes

Var myFunction = function(arg) { console.log(arg) ; } (function() { console.log('completely unrelated function') ; return 'see what happens' ; }()) ;

10voto

Josh Stodola Points 42410

Restez cohérent ! Ils ne sont pas nécessaires, mais je les utilise personnellement car la plupart des techniques de minification reposent sur le point-virgule (par exemple, Packer ).

7voto

regex Points 2247

Tout dépend de vos préférences. J'aime terminer les lignes de code par des points-virgules parce que je suis habitué à Java, C++, C#, etc., donc j'utilise les mêmes standards pour coder en javascript.

En général, je ne termine pas les déclarations de fonctions par des points-virgules, mais ce n'est que ma préférence.

Les navigateurs l'exécuteront de toute façon, mais peut-être qu'un jour, ils établiront des normes plus strictes en la matière.

Exemple de code que j'écrirais :

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}

1 votes

Les lignes doivent impérativement être terminées par des points-virgules, sinon le minificateur risque de rompre complètement la fonctionnalité.

9 votes

@david : dans ce cas le minifieur est cassé, sûrement ?

0 votes

Je suis d'accord. C'est une façon naturelle de coder pour les personnes (comme moi) qui viennent de milieux C/C++. Elle rend également le code plus lisible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X