当我们使用模板文字时,`usestrict`不起作用
如果我use strict
用反引号/模板文字括起来,“使用严格”不会按预期工作。你能分享一下背后的原因吗?是否有任何类似的异常语句模板文字无法按预期工作?
`use strict`;
x = 3.14; // Ideally it should cause an error (as x is not defined).
alert(x);
回答
它就是这么设计的。
从ES6 规范:
14.1.1 指令序言和使用严格指令
甲指令序幕是最长序列ExpressionStatement存在作为初始生产StatementListItem或ModuleItem一个的制作函数体,一个ScriptBody或ModuleBody并且其中每个ExpressionStatement序列中完全由一个的串文字标记后跟一个分号。分号可以显式出现,也可以通过自动分号插入来插入。指令序言可能是一个空序列。
Use Strict Directive 是Directive Prologue 中的ExpressionStatement,其StringLiteral要么是确切的代码单元序列,
"use strict"
要么是'use strict'
. Use Strict Directive 不能包含EscapeSequence或LineContinuation。指令序言可能包含多个使用严格指令。但是,如果发生这种情况,实现可能会发出警告。
强调我的。
它明确指出,要使 Use Strict 指令起作用,它必须用单引号或双引号编写,但为此目的根本不允许使用模板文字。