不建议在 ES6 中使用“use strict”?

IT技术 javascript ecmascript-6 strict es6-modules
2021-03-16 23:20:43

我还不熟悉 ECMAScript 6。我刚刚克隆了 React Starter Kit 存储库,它使用 ES6 作为应用程序代码。我很惊讶地看到 linter 被配置为禁止出现该use strict指令,我认为这是在 ES6 之前的 JavaScript 中推荐的。那么有什么意义呢?

1个回答

ES6 module始终处于严格模式。引用规范的相关部分

10.2.1 严格模式代码

可以使用不受限制或严格模式的语法和语义来处理 ECMAScript 脚本句法单元。在以下情况下,代码被解释为严格模式代码:

  • 如果全局代码以包含使用严格指令的指令序言开头(参见 14.1.1),则它是严格模式代码。
  • module代码始终是严格模式代码。
  • ClassDeclaration 或 ClassExpression 的所有部分都是严格模式代码。
  • 如果 Eval 代码以包含使用严格指令的指令序言开头,或者如果对 eval 的调用是包含在严格模式代码中的直接 eval(参见 12.3.4.1),则它是严格模式代码。
  • 如果相关的 FunctionDeclaration、FunctionExpression、GeneratorDeclaration、GeneratorExpression、MethodDefinition 或 ArrowFunction 包含在严格模式代码中,或者产生函数 [[ECMAScriptCode]] 内部槽值的代码以指令序言开头,则函数代码是严格模式代码包含使用严格指令。
  • 如果最后一个参数是一个字符串,则作为参数提供给内置函数和生成器构造函数的函数代码是严格模式代码,如果最后一个参数在处理时是一个以包含使用严格指令的指令序言开头的函数体。
详细检查“它是一个module吗?” , 参见nczonline.net/blog/2016/04/ ... "...虽然 import 或 export 的存在可能表明是一个module,但 import 或 export 的缺失并不能明确表明该文件不是一个module。所以有在解析过程中没有自动检测文件是module的有效方法。”
2021-04-18 23:20:43
全局代码和module代码有什么区别?我想我误解了,因为module代码对我来说意味着 module.js 中的所有内容,如果我需要('module')。
2021-04-20 23:20:43
究竟什么是“module”?我得到的strict错误(与该制作的Airbnb预设)上只包含一个脚本"use strict"; console.log('foo')那是一个module吗?
2021-05-03 23:20:43
感谢您的答复。那么如果不使用 import/export 关键字,它就不是 ES6 module吗?现在我使用的是 Node 4,我无法访问导入/导出关键字,我只是使用 CommonJS module.exports 和 require() 以及默认启用的 ES6 功能。这将解释为什么我必须将 use strict 放在每个文件的顶部。所以从技术上讲,我仍在编写在 V8 中启用了一些 ES6 特性的 CommonJS module?
2021-05-08 23:20:43
@BrynnMahsman ES2015 具有本机module。CommonJS 只是一个库,与语言无关。
2021-05-15 23:20:43