什么是序言指令?

Cyb*_*Fox 5 javascript ecmascript-5

我偶然发现了人们选择称之为Prologue Directives的东西.更常见的是"使用严格"; JavaScript中的字符串文字.我已经知道了.但共同点是Prologue Directive.这是什么?关于这个主题的文献很少.最好的一个是我联系的问题.

ECMAScript多个序言指令

我的问题是通用的:

这些是什么?

它们可以用于什么?

谁使用它们,为什么?

我能做到吗?

我是不是该?

kan*_*gax 5

无需文档。只需查看源代码即可。

指令序言是最长的 ExpressionStatement 产品序列,作为程序或 FunctionBody 的初始 SourceElement 产品出现,并且序列中的每个 ExpressionStatement 完全由紧跟分号的 StringLiteral 标记组成。分号可以明确出现,也可以通过自动分号插入来插入。指令序言可能是一个空序列。

Use Strict 指令是指令序言中的表达式语句,其 StringLiteral 是确切的字符序列“use strict”或“use strict”。使用严格指令不能包含 EscapeSequence 或 LineContinuation。

指令序言可以包含多个使用严格指令。但是,如果发生这种情况,实现可能会发出警告。

换句话说,指令序言是函数或程序(顶级代码)精确开始处的最长字符串文字+分号序列:

(function(){
  "use strict"; // <-- Directive Prologue
})()
Run Code Online (Sandbox Code Playgroud)

或者:

(function() {
  // Directive Prologue start
  "foo bar"
  "baz";
  '123';
  '';
  // Directive Prologue end
})();
Run Code Online (Sandbox Code Playgroud)

或者:

'blah'; // <-- Directive Prologue (top-level code)
/* rest of the code here */
Run Code Online (Sandbox Code Playgroud)

请注意,只要字符串文字不是第一个语句,它就不再是指令序言:

var x;
"use strict"; // <-- NOT a Directive Prologue
Run Code Online (Sandbox Code Playgroud)

或者:

(function() {
  1 + "use magic"; // <-- NOT a Directive Prologue
})();
Run Code Online (Sandbox Code Playgroud)