web-dev-qa-db-fra.com

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

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

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

ou

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

Les points-virgules après les déclarations de fonctions ne sont pas nécessaires .

La grammaire d'un FunctionDeclaration est décrite dans la spécification ainsi:

function Identifier ( FormalParameterListopt ) { FunctionBody }

Aucun point-virgule n'est requis grammaticalement, mais vous pourriez vous demander pourquoi?

Les points-virgules servent à séparer les instructions les unes des autres, et un FunctionDeclaration n'est pas un instruction.

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

Les termes "déclaration de fonction" et "instruction de fonction" sont souvent utilisés de manière interchangeable à tort, car aucune instruction de fonction n'est décrite dans la spécification ECMAScript; toutefois, certaines implémentations incluent une instruction de fonction dans leur grammaire, notam- est non standard.

Cependant, il est recommandé de toujours utiliser des points-virgules 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 entourant la seconde seront interprétées comme le Arguments d'un appel de fonction.

Cours recommandés:

418
CMS

Je les utilise après les déclarations de fonction-comme-variable:

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

mais pas après les définitions de style classique:

function f() {
    ...
}
38
Gabe Moothart

JS Lint est une convention de facto et ne dit pas de point-virgule après le corps de la fonction. Voir la section "Point-virgule" .

20
David Hedlund

Restez juste 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 ).

7
Josh Stodola

Cela dépend vraiment de vos préférences. J'aime terminer les lignes de code par des points-virgules, car je suis habitué à Java, C++, C #, etc., donc j'utilise les mêmes normes pour le codage en javascript.

Je ne termine généralement pas les déclarations de fonction par des points-virgules, mais ce n’est que ma préférence.

Les navigateurs l’utiliseront dans les deux sens, mais peut-être qu’un jour ils proposeront 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
     }
}
5
regex

C'est en fait plus qu'une question de convention ou de cohérence.

Je suis à peu près certain que pas, le fait de placer des points-virgules après chaque déclaration ralentit l'analyseur interne car il doit déterminer la fin de la déclaration. J'aimerais avoir quelques chiffres utiles pour que vous puissiez le confirmer, mais vous pouvez peut-être y chercher vous-même. :)

De même, lorsque vous compressez ou réduisez le code, un manque de points-virgules peut conduire à une version abrégée de votre script qui ne fait pas ce que vous vouliez, car tous les blancs disparaissent.

3
Mason

Quand j'ai minifié mes scripts, j'ai réalisé que je devais utiliser le point-virgule pour les fonctions qui commencent par la marque égale. Si vous définissez une fonction en tant que var, vous devez utiliser le point-virgule.

besoin de point-virgule

var x = function(){};
var x = new function(){};
this.x = function(){};

pas besoin de point-virgule

function x(){}
1
senera

SIMPLE:

C'est une bonne pratique de laisser les points-virgules ; après la fin des accolades de fonction. Ils sont considérés comme une pratique exemplaire depuis des années.

L'un des avantages de toujours les utiliser est si vous souhaitez réduire votre JavaScript.

En réduisant le javascript, aide à réduire un peu la taille du fichier.

Mais comme pour la meilleure pratique et la réponse ci-dessus, il n'est pas recommandé de l'utiliser après une balise de fonction.

Si vous n'utilisez PAS de point-virgule et si vous souhaitez réduire (comme beaucoup de développeurs aiment le faire si leur site utilise beaucoup de JavaScript), vous risquez d'obtenir toutes sortes d'erreurs/avertissements.

0
Shaze

le point-virgule après une fonction n'est pas nécessaire pour l'utiliser, ne provoque pas d'erreur dans votre programme. Toutefois, si vous prévoyez de réduire votre code, il est conseillé d'utiliser des points-virgules après les fonctions. disons par exemple que vous avez un code comme celui ci-dessous

//file one
var one=1;
var two=2;
function tryOne(){}
function trytwo(){}

et

//file two
var one=1;
var two=2;
function tryOne(){};
function trytwo(){};

lorsque vous réduisez les deux, vous obtenez le texte suivant en sortie

Notez que les commentaires sont juste pour l'illustration

//file one
var one=1;var two=2;function tryOne(){}
function trytwo(){}

et

//file two
var one=1;var two=2;function tryOne(){};function trytwo(){};
0
DilanTsasi