Могут ли комментарии появляться перед `use strict;`?

Я видел несколько мест вокруг Интернета, пассивно заявляющих 'use strict;', которые должны появиться в первой строке функциональной области, для которой вы хотите применить поведенческую директиву.

Однако, по моему опыту, не имеет значения, есть ли перед ним комментарии.

/* some comment */
'use strict';

Существует ли функциональный недостаток с комментариями перед директивой, или это чисто вопрос стиля? Определяется ли это где-либо в спецификации ECMAScript?

Я задаю вопрос не только для сред V8 (node.js), но и для браузеров.

Ответы

Ответ 1

В соответствии со стандартом ECMAScript 262, 5-е издание, раздел 14.1:

, , исходные исходные элементы SourceElement для Program или FunctionBody и где каждое ExpressionStatement в последовательности полностью состоит из токена StringLiteral, за которым следует точка с запятой

Акцент мой

и раздел 14.1.1 стандарта 6-е издание ECMAScript 262:

Директива Пролог есть. , , начальные производства StatementListItem или ModuleItem для FunctionBody, ScriptBody или ModuleBody.

Акцент мой


Возможно, проще говоря, раздел 7.4 ECMAScript 5-е изд. Стандарт (раздел 11.4 стандарта ECMAScript 6-е изд.) гласит:

Комментарии ведут себя как пробелы и отбрасываются

Поскольку комментарии не являются утверждениями и в конечном итоге отбрасываются, use strict; может последовать за ними, так как это первое эффективное утверждение в теле.


Обновление лет спустя - более или менее, больше контекста.

У большинства парсеров есть шаг лексирования и шаг синтаксического анализа. Первый, лексический, разбивает текстовый исходный код на более ощутимые токены (такие как left angle bracket, identifier, comma, string literal и т.д.), И шаг синтаксического анализа фактически что-то с ними делает - во многих случаях (и, конечно, в случае Javascript), превратив его в то, что называется абстрактным синтаксическим деревом (или AST для краткости).

Две вещи делают это "разрешенным", особенно в соответствии с этим комментарием - во- первых, это тот факт, что комментарии должны быть отброшены, что обычно происходит во время лексизма, и 'use strict'; должен быть первым оператором, который обычно проверяется при разборе.

Поскольку перед синтаксическим разбором стоит lexing, следует проверить 'use strict'; на самом деле никогда не увидит комментарии, чтобы даже получить возможность иметь проблемы с ними.

Ответ 2

Да, вы можете добавлять комментарии до "use strict"; - он должен появляться перед любыми операторами.

См. этот пример из MDN

// Whole-script strict mode syntax
"use strict";
var v = "Hi!  I'm a strict mode script!";

Ответ 3

Согласно MDN, use strict; должен быть первым оператором в script или функции. Комментарии не являются инструкциями.

Ответ 4

Да. Комментарии могут быть помещены перед объявлением "использовать строгую". JavaScript-движки просто пропускают комментарии, поэтому для всех целей и задач оператор "use strict" находится в верхней части функциональной области.