什么是序言指令?

时间:2015-03-02 04:47:37

标签: javascript ecmascript-5

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

ECMAScript multiple Prologue Directives

我的问题是通用的:

他们是什么?

它们可以用于什么?

谁使用它们以及为什么?

我可以制作它们吗?

我应该吗?

1 个答案:

答案 0 :(得分:1)

无需文档。只需查看the source

  

指令序言是ExpressionStatement的最长序列   作为一个初始SourceElement产生的产品   程序或FunctionBody和每个ExpressionStatement在哪里   sequence完全由一个StringLiteral标记组成   分号。分号可以明确显示或者可以插入   自动分号插入。指令序言可能是空的   序列

     

使用严格指令是指令中的表达式   序列,其StringLiteral是确切的字符序列   "使用严格"或者'使用严格的'。使用严格指令可能不包含   EscapeSequence或LineContinuation。

     

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

换句话说,Directive Prologue是函数或程序(顶级代码)的确切开头处字符串文字+分号的最长序列:

(function(){
  "use strict"; // <-- Directive Prologue
})()

或:

(function() {
  // Directive Prologue start
  "foo bar"
  "baz";
  '123';
  '';
  // Directive Prologue end
})();

或:

'blah'; // <-- Directive Prologue (top-level code)
/* rest of the code here */

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

var x;
"use strict"; // <-- NOT a Directive Prologue

或:

(function() {
  1 + "use magic"; // <-- NOT a Directive Prologue
})();