J'ai vu quelques endroits sur Internet déclarer passivement que 'use strict;' doit apparaître sur la première ligne de l'étendue fonctionnelle pour laquelle vous souhaitez que la directive comportementale s'applique.

Cependant, d'après mon expérience, peu importe s'il y a des commentaires avant.

/* some comment */
'use strict';

Existe-t-il une lacune fonctionnelle dans la présentation de commentaires avant la directive, ou s'agit-il uniquement d'une question de style? Est-ce défini quelque part dans la spécification ECMAScript?

Je demande non seulement des environnements V8 (node.js), mais aussi des navigateurs.

26
Qix - MONICA WAS MISTREATED 14 juil. 2015 à 20:04

4 réponses

Meilleure réponse

Selon la section standard ECMAScript 262 5e édition 14.1:

. . . les productions SourceElement initiales d'un Program ou FunctionBody et où chaque ExpressionStatement de la séquence est entièrement composé d'un jeton StringLiteral suivi d'un point-virgule

Emphase mine

Et la section standard ECMAScript 262 6e édition 14.1.1:

Un Prologue Directive est. . . les productions StatementListItem ou ModuleItem initiales d'un FunctionBody, d'un ScriptBody ou d'un ModuleBody.

Emphase mine


Plus simplement, la section 7.4 de ECMAScript 5e éd. standard (section 11.4 de la norme ECMAScript 6e éd. ) États:

Les commentaires se comportent comme des espaces blancs et sont supprimés

Comme les commentaires ne sont pas des déclarations et sont finalement supprimés, use strict; peut venir après eux car c'est la première déclaration efficace dans le corps.


Une mise à jour des années plus tard - plus ou moins, plus de contexte.

La plupart des analyseurs ont une étape de lexing et une étape d'analyse. Le premier, lexing, décompose le code source textuel en jetons plus palpables (tels que left angle bracket, identifier, comma, string literal, etc.) et l'étape d'analyse en fait < em> fait quelque chose avec eux - dans de nombreux cas (et certainement dans le cas de Javascript), le transformant en ce qu'on appelle un Arbre de syntaxe abstraite (ou AST pour faire court).

Deux choses rendent cela "autorisé", en particulier selon ce commentaire - l'une est le fait que les commentaires doivent doivent être supprimés, ce qui se produit généralement pendant la lexing , et le 'use strict'; doit être la première instruction, qui est généralement vérifiée pendant l'analyse syntaxique .

Puisque le lexing vient avant l'analyse, donc la vérification de 'use strict'; ne verra jamais les commentaires pour avoir même la possibilité d'avoir un problème avec eux.

17
Qix - MONICA WAS MISTREATED 14 déc. 2018 à 15:33

Oui, vous pouvez ajouter des commentaires avant "use strict"; - ils doivent simplement apparaître avant toute déclaration .

Voir cet exemple de MDN

// Whole-script strict mode syntax
"use strict";
var v = "Hi!  I'm a strict mode script!";
20
Dave 14 juil. 2015 à 17:08

Oui. Des commentaires peuvent être placés avant la déclaration "use strict". Les moteurs JavaScript sautent simplement les commentaires, donc à toutes fins utiles, la déclaration "use strict" est en haut de la portée fonctionnelle.

0
kieranpotts 14 juil. 2015 à 17:09

Selon MDN, use strict; doit être le premier instruction dans un script ou une fonction. Les commentaires ne sont pas des déclarations.

3
Matt Olson 14 juil. 2015 à 17:10