我已经看到互联网上的一些地方被动地声明'use strict;'
必须出现在您希望行为指令适用的功能范围的第一行行。
但是,根据我的经验,如果之前有评论并不重要。
/* some comment */
'use strict';
是否存在功能性缺陷,在指令之前有评论,或者纯粹是风格问题?这是在ECMAScript规范中的任何地方定义的吗?
我不仅要求V8(node.js)环境,还要求浏览器。
答案 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 bracket
,identifier
,comma
,string literal
等),实际解析步骤< em>与他们做某事< - 在许多情况下(当然在Javascript的情况下),把它变成所谓的Abstract Syntax Tree(或简称AST)。
有两件事让这个“被允许”,特别是按照this comment - 一个是要放弃评论的事实,这通常发生在 lexing 期间,{{1}必须是第一个语句,通常在解析期间检查。
由于lexing在解析之前出现,因此对'use strict';
的检查将永远不会看到评论,甚至可能会对它们产生问题。
答案 2 :(得分:3)
According to MDN,use strict;
必须是脚本或函数中的第一个语句。评论不是陈述。