可以在“use strict;”之前发表评论吗?

时间:2015-07-14 17:04:18

标签: javascript strict

我已经看到互联网上的一些地方被动地声明'use strict;'必须出现在您希望行为指令适用的功能范围的第一行行。

但是,根据我的经验,如果之前有评论并不重要。

/* some comment */
'use strict';

是否存在功能性缺陷,在指令之前有评论,或者纯粹是风格问题?这是在ECMAScript规范中的任何地方定义的吗?

我不仅要求V8(node.js)环境,还要求浏览器。

3 个答案:

答案 0 :(得分:18)

是的,您可以在"use strict";之前添加评论 - 它必须出现在任何语句之前。

请参阅MDN

中的此示例
// Whole-script strict mode syntax
"use strict";
var v = "Hi!  I'm a strict mode script!";

答案 1 :(得分:17)

根据ECMAScript 262第5版标准部分14.1

  

。 。 。程序或FunctionBody的初始SourceElement 生成,并且序列中的每个ExpressionStatement完全由StringLiteral标记组成,后面跟着分号

强调我的

和ECMAScript 262第6版标准部分14.1.1

  

指令序言是。 。 。 FunctionBody,ScriptBody或ModuleBody的初始StatementListItem ModuleItem 制作。

强调我的

或许更简单地说,ECMAScript第5版的7.4部分。标准(ECMAScript第6版标准的11.4部分)声明:

  

评论表现得像白色空间并被丢弃

由于评论不是陈述而且最终被丢弃,use strict;可以在它们之后,因为它是正文中的第一个有效陈述。

多年后的更新 - 或多或少,更多背景。

大多数解析器都有一个lexing步骤和一个解析步骤。第一个,lexing,将文本源代码分解为更明显的标记(例如left angle bracketidentifiercommastring literal等),实际解析步骤< em>与他们做某事< - 在许多情况下(当然在Javascript的情况下),把它变成所谓的Abstract Syntax Tree(或简称AST)。

有两件事让这个“被允许”,特别是按照this comment - 一个是要放弃评论的事实,这通常发生在 lexing 期间,{{1}必须是第一个语句,通常在解析期间检查。

由于lexing在解析之前出现,因此对'use strict';的检查将永远不会看到评论,甚至可能会对它们产生问题。

答案 2 :(得分:3)

According to MDNuse strict;必须是脚本或函数中的第一个语句。评论不是陈述。