Maison  >  Article  >  interface Web  >  Introduction détaillée au mécanisme d'insertion de point-virgule dans les connaissances JavaScript_Basic

Introduction détaillée au mécanisme d'insertion de point-virgule dans les connaissances JavaScript_Basic

WBOY
WBOYoriginal
2016-05-16 16:14:351193parcourir

est inséré

seulement avant }, après un ou plusieurs sauts de ligne et à la fin de la saisie du programme

Cela signifie que vous ne pouvez omettre que le point-virgule à la fin d'une ligne, d'un bloc de code et d'un programme.

C'est-à-dire que vous pouvez écrire le code suivant

Copier le code Le code est le suivant :

fonction carré(x) {
var n = x
Retour n*n
>

Mais vous ne pouvez pas écrire le code comme celui-ci, sinon une erreur sera signalée
Copier le code Le code est le suivant :

zone de fonction (r) { r = r return Math.PI*r*r }//erreur

Insérer

uniquement si les balises d'entrée suivantes ne peuvent pas être analysées

En d’autres termes, l’insertion d’un point-virgule est un mécanisme de correction d’erreurs. Regardez le code et parlez

Copier le code Le code est le suivant :

une = b
(f())
//Peut être correctement analysé en une seule instruction. Le prix unitaire est l'instruction suivante
. une = b(f())

a = b
f()
//Analysé en deux déclarations indépendantes
a = bf();//Erreur d'analyse

Vous devez donc faire attention au début de l'instruction suivante pour déterminer si vous pouvez légalement omettre le point-virgule.

(, [, , -, et / Ces cinq caractères commencent la déclaration, il est alors préférable de ne pas omettre le point-virgule devant.

Donnez-moi un exemple

Copier le code Le code est le suivant :

une = b
['r', 'g', 'b'].forEach(function (key) {
console.log(clé);
});

À l'origine, vous pensiez qu'il n'y avait pas d'erreur, mais l'analyseur l'a analysée dans l'instruction suivante
Copier le code Le code est le suivant :

a = b['r', 'g', 'b'].forEach(function (key) {
console.log(clé);
});

Étant donné que la deuxième instruction commence par [, l'analyseur n'insérera pas automatiquement de point-virgule après la première instruction, elle est donc analysée comme indiqué ci-dessus. La formule ci-dessus est analysée comme b['b'].forEach. N'est-ce pas faux ?

Donc pour les phrases commençant par ces cinq caractères (, [, , -, et / , il est préférable de ne pas omettre le point-virgule devant.

Si vous souhaitez omettre le point-virgule, les programmeurs expérimentés suivront cette instruction par une instruction de déclaration pour s'assurer que l'analyseur l'analyse correctement. Comme indiqué ci-dessous

Copier le code Le code est le suivant :

une = b
var x // Une instruction de déclaration est spécialement ajoutée ici pour garantir que a = b ne sera pas analysé avec (f())
(f())

Donc, si vous devez omettre le point-virgule, vous devez vérifier si la marque de début de la ligne suivante est constituée des cinq caractères ci-dessus, ce qui amènera l'analyseur à désactiver l'insertion automatique des points-virgules, ou vous pouvez également utiliser les cinq caractères (, [, , -, et / Précédé d'un point-virgule

L'omission des points-virgules entraîne des problèmes de connexion au script

Copier le code Le code est le suivant :

//fichier1.js
(fonction () {
//......
})()

//file2.js
(fonction () {
//......
})()

Lorsque les deux fichiers ci-dessus sont connectés, ils seront analysés comme suit

Copier le code Le code est le suivant :

(fonction () {
//......
})()(fonction () {
//......
})()

Donc, omettre le point-virgule nécessite non seulement de surveiller le jeton suivant dans le fichier actuel, mais également tout jeton qui peut apparaître après l'instruction une fois le script connecté.

Pour éviter les erreurs d'analyse de l'analyseur, vous pouvez préfixer chaque fichier avec un point-virgule supplémentaire pour protéger le script d'une concaténation imprudente. Si la première instruction du fichier s'ouvre avec les cinq caractères vulnérables mentionnés ci-dessus, vous devez ajouter un préfixe point-virgule supplémentaire.

La syntaxe JavaScript restreint la production

La syntaxe JavaScript restreint la production : aucun saut de ligne n'est autorisé entre deux caractères.

Exemple :

Copier le code Le code est le suivant :

revenir
{};

Le code ci-dessus est analysé en
Copier le code Le code est le suivant :

revenir ;
{}
;

Règles d'insertion de point-virgule pour les opérations d'auto-incrémentation et d'auto-décrémentation

Copier le code Le code est le suivant :

une

b

Pensez-y, dans quoi le code ci-dessus sera-t-il analysé ? Dites-moi la réponse, car l'opérateur d'incrémentation peut être utilisé à la fois comme opérateur de préfixe et d'opérateur de suffixe, mais l'opérateur de suffixe ne peut pas apparaître avant une nouvelle ligne, donc le code ci-dessus est analysé dans
Copier le code Le code est le suivant :

une;
b;

Le point-virgule ne sera pas automatiquement inséré comme séparateur en tête d'une instruction de boucle for vide

Copier le code Le code est le suivant :

pour (var je = 0,total=1
je < longueur
je ) {
total*=i;
>

Un code comme celui ci-dessus provoquera des erreurs d’analyse.

Le while du corps de la boucle vide doit également afficher un point-virgule, sinon cela provoquera également des erreurs d'analyse

Copier le code Le code est le suivant :

fonction montest() {
Tandis que (vrai)
>

Il doit être écrit comme suit pour éviter les erreurs
Copier le code Le code est le suivant :

fonction montest() {
Tandis que (vrai) ;
>

Pour résumer

1. Les points-virgules se déduisent uniquement avant le signe }, en fin de ligne et à la fin d'un programme
2. Le point-virgule
n'est déduit que si la balise suivante ne peut pas être analysée 3. Le point-virgule
ne doit pas être omis avant les instructions commençant par (, [, , - et / caractères 4. Lorsque vous liez des scripts, insérez explicitement des points-virgules
entre les scripts 5. Ne coupez jamais une ligne avant les paramètres de retour, lancer, pause, continuer ou --
6. Un point-virgule ne peut pas être déduit comme tête d'une boucle for ou comme délimiteur d'une instruction vide

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn