【发布时间】:2015-10-19 12:54:04
【问题描述】:
我还不熟悉 ECMAScript 6。我刚刚克隆了 React Starter Kit repo,它使用 ES6 编写应用程序代码。我很惊讶地看到 linter 是 configured 以禁止出现 use strict 指令,我认为这是在 ES6 之前的 JavaScript 中推荐的。那有什么意义呢?
【问题讨论】:
标签: javascript ecmascript-6 strict es6-modules
我还不熟悉 ECMAScript 6。我刚刚克隆了 React Starter Kit repo,它使用 ES6 编写应用程序代码。我很惊讶地看到 linter 是 configured 以禁止出现 use strict 指令,我认为这是在 ES6 之前的 JavaScript 中推荐的。那有什么意义呢?
【问题讨论】:
标签: javascript ecmascript-6 strict es6-modules
ES6 模块始终处于严格模式。引用the spec的相关部分:
10.2.1 严格模式代码
可以使用不受限制或严格模式的语法和语义来处理 ECMAScript 脚本语法单元。代码在以下情况下被解释为严格模式代码:
- 如果全局代码以包含使用严格指令的指令序言开头,则它是严格模式代码(参见 14.1.1)。
- 模块代码始终是严格模式代码。
- ClassDeclaration 或 ClassExpression 的所有部分都是严格模式代码。
- 如果 Eval 代码以包含 Use Strict 指令的 Directive Prologue 开头,或者如果对 eval 的调用是包含在严格模式代码中的直接 eval(请参阅 12.3.4.1),则它是严格模式代码。
- 如果相关的 FunctionDeclaration、FunctionExpression、GeneratorDeclaration、GeneratorExpression、MethodDefinition 或 ArrowFunction 包含在严格模式代码中,或者生成函数 [[ECMAScriptCode]] 内部槽值的代码以包含使用严格指令的指令序言。
- 作为参数提供给内置函数和生成器构造函数的函数代码是严格模式代码,如果最后一个参数是一个字符串,处理时是一个以包含使用严格指令的指令序言开头的 FunctionBody。
【讨论】:
"use strict"; console.log('foo') 的脚本上收到strict 错误(带有the AirBnB preset)。那是一个模块吗?