我还不熟悉ECMAScript 6。我刚刚克隆了React Starter Kit repo,它使用ES6作为应用程序代码。我很惊讶地发现linter是configured以禁止use strict
指令的出现,我认为这是在ES6之前的JavaScript中推荐的。那有什么意义呢?
答案 0 :(得分:232)
ES6模块始终处于严格模式。引用the spec的相关部分:
10.2.1严格模式代码
可以使用无限制或严格模式语法和语义来处理ECMAScript脚本语法单元。在以下情况下,代码被解释为严格模式代码:
- 全局代码是严格模式代码,如果它以包含使用严格指令的指令序言开头(见14.1.1)。
- 模块代码始终是严格模式代码。
- ClassDeclaration或ClassExpression的所有部分都是严格模式代码。
- 如果Eval代码以包含Use Strict Directive的Directive Prologue开头,或者对eval的调用是严格模式代码中包含的直接eval(见12.3.4.1),则Eval代码是严格模式代码。
- 如果关联的FunctionDeclaration,FunctionExpression,GeneratorDeclaration,GeneratorExpression,MethodDefinition或ArrowFunction包含在严格模式代码中,或者产生函数[[ECMAScriptCode]]内部插槽的值的代码开头,则函数代码是严格模式代码包含使用严格指令的指令序言。
- 作为内置函数和生成器构造函数的参数提供的函数代码是严格模式代码,如果最后一个参数是一个String,处理时是一个以包含Use Strict指令的指令序言开头的FunctionBody。