什么是Prologue指令?

8
我偶然发现了一些人们选择称之为序言指令的东西。在JavaScript中,更常用的是字符串文字"use strict";。我已经对此非常了解。但是,序言指令的共同点是什么?这是一个什么东西?这个主题几乎没有什么文献可供参考,最好的一个是我提供的问题。 ECMAScript multiple Prologue Directives 我的问题很普遍:
它们是什么?
它们可以用来做什么?
谁使用它们以及为什么要使用它们?
我能制作它们吗?
我应该制作它们吗?

我对汇编指令不是很了解,无法回答你的问题。但是,如果可以的话,这里有一些关于严格模式以及为什么应该使用它的更多信息。目前,我所知道的唯一得到广泛支持的是严格模式。正如你提到的那个问题所述,ASM.js在一些浏览器中得到了支持/正在得到支持 - Useless Code
1个回答

5
不需要文档。只需查看源代码

指令序言是程序或函数体的初始SourceElement生产中作为ExpressionStatement生产的最长序列,其中序列中的每个ExpressionStatement完全由StringLiteral令牌和分号组成。分号可以明确出现,也可以通过自动分号插入来插入。指令序言可以是空序列。

使用严格指令是指令序言中的ExpressionStatement,其StringLiteral是精确字符序列“use strict”或'use strict'。使用严格指令可能不包含EscapeSequence或LineContinuation。

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

换句话说,指令序言是以字符串文字+分号的最长序列开始函数或程序(顶级代码)的序列:
(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
})();

除了"use strict"之外,它们还有什么用途? - CyberFox
对于其他“非标准”指令,如“use asm”,“use 6to5”等。https://twitter.com/jashkenas/status/562996829777059840 - kangax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接