Quand dois-je utiliser un point-virgule après accolades?
De nombreuses fois j'ai vu un point-virgule utilisée après une déclaration de fonction, ou d'après l'anonyme "retour" de la fonction d'un Motif de Module de script. Quand est-il approprié d'utiliser un point-virgule après accolades?
Vous devez vous connecter pour publier un commentaire.
Vous utilisez un point-virgule après une déclaration. C'est une déclaration:
JS:
parce que c'est une affectation de variable (c'est à dire la création et l'attribution d'une fonction anonyme pour une variable).
Les deux choses qui viennent à l'esprit qui ne sont pas consolidés sont les déclarations de fonction:
JS:
et blocs:
JS:
Remarque: ce même bloc construire sans point-virgule s'applique également à
for
,do
etwhile
boucles.if
consolidés.Il est également important lorsque vous avez l'intention de rapetisser votre code.
Donc, personnellement, je ajouter l'un après chaque
}
où ASI à insérer un.J'ai écrit un post sur ASI en JavaScript.
Ne pas utiliser un point-virgule:
...si c'est juste de tous les jours déclaration de fonction:
Utilisez un point-virgule:
...si c'est une mission:
...ou l'invocation de la fonction:
Vous ne devez jamais; vous pouvez toujours (sauf avant
else
etwhile
).Explication:
Malheureusement, Javascript points-virgules sont facultatifs.
Par conséquent, vous n'avez jamais besoin d'ajouter un point-virgule.
C'est (très) bonnes pratiques à mettre fin à tous les déclaration avec un point-virgule.
Les seules instructions qui se termine avec un
}
sont des énoncés se terminant par un littéral d'objet (par exemple, JSON) ou expression de fonction.Donc, la meilleure pratique est de mettre des points-virgules après les deux accolades (uniquement):
function someFunc(){ };
est encore une déclaration qui a besoin de point-virgule?Si nous avons un libre-invocation de la fonction, nous avons besoin de mettre un point-virgule avant, sinon il devient une partie de la précédente instruction d'affectation. Considérez les points suivants:
Cela produira la sortie suivante:
...en plus d'une erreur JavaScript signalé par le navigateur:
testOb.testMethod is not a function
Ce n'est certainement pas ce que nous avons prévu. Pourquoi est -
testMethod
courir immédiatement, avant nous avons même instancié la classe? Et pourquoi il n'existe plus lorsque l'on veut l'appeler comme une méthode de membre?Ce qui se passe est que
testMethod
est attribuée non pas à notre définition de la fonction, mais la valeur de retour de la définition de la fonction. Et la définition de la fonction elle-même est en cours d'exécution de façon anonyme. C'est de cette façon:testClass
constructeur et de la méthode de membrereport
sont correctement définis/affecté.testMethod
, le()
environnant les suivants auto-invocation de la fonction devient une invocation de l'opérateur, ce qui provoque ce que nous pensons est notre définition de latestMethod
pour devenir une fonction anonyme qui est appelée immédiatement, et la valeur de retour de la suite de fonction anonyme devient sa liste de paramètres. C'est ce qui explique l'ordre de la sortie imprimée - notre auto-invocation de la fonction est exécuté en premier car il est considéré comme un paramètre.testMethod
, et pas la définition de la fonction. Ceci est confirmé par notre impression sur le type et la valeur detestMethod
.testClass
est correctement instancié commetestOb
et sesreport
méthode fonctionne comme prévu, prouvant ainsi que la définition de la classe est sinon intact.testMethod
, nous dit-on, par l'interprète que ce n'est pas une fonction - et à juste titre, car c'est un nombre avec la valeur 2.Si nous avons mis un point-virgule après la définition de la
testMethod
, il va se séparer de son affectation à partir de la vocation de l'auto-invocation de la fonction, et nous aurons le résultat que nous attendions:Ou on pourrait même le mettre directement en avant de la fonction anonyme:
Mais je suggère que, puisque le problème est dû à l'absence d'un point-virgule à la fin d'une instruction d'affectation, nous devrions peut-être prendre l'habitude de toujours mettre un point-virgule après la définition des fonctions de cette façon. c'est à dire l'ensemble de mes fonctions ci-dessus doit avoir un point-virgule après l'accolade de fermeture, parce qu'elles sont toutes les affectations de fonctions anonymes.
Vous devriez également utiliser un point-virgule après l'accolade après le retour d'une fonction dans une fonction en Javascript.
Des points-virgules à la fin des lignes qui ne se terminent pas par une accolade ou d'états distincts sur la même ligne. Il n'y a aucun mal à utiliser après une accolade de fermeture, ou de porter des bretelles et une ceinture, mais il ressemble un peu ringard.
Je sais que ce fil est vieux, mais n'a pas pu résister à partager ce code:
Sera de retour "de la Propriété de l'objet [object object] n'est pas une fonction". Parce qu'il sera effectivement exécuté en tant que: