不建议在ES6中使用"use strict"?

Mid*_*rse 190 javascript strict ecmascript-6 es6-modules

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

Kit*_*nde 247

ES6模块始终处于严格模式.引用规范的相关部分:

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指令的Directive Prologue开头的FunctionBody.

  • 感谢您的答复.如果它不使用导入/导出关键字,那么它不是ES6模块吗?现在我正在使用Node 4,我无法访问导入/导出关键字,我只是使用CommonJS module.exports和require()以及默认启用的ES6功能.这可以解释为什么我必须在每个文件的顶部使用strict strict.从技术上讲,我还在编写CommonJS模块,在V8中启用了一些ES6功能? (18认同)
  • 全局代码和模块代码之间有什么区别?我想我是误会,因为模块代码对我来说意味着module.js中的所有东西,如果我需要('模块'). (11认同)
  • @BrynnMahsman ES2015有原生模块.CommonJS只是一个库,与语言无关. (8认同)
  • 有关*"是模块吗?"*的详细检查,请参阅https://www.nczonline.net/blog/2016/04/es6-module-loading-more-complicated-than-you-think/*" ...虽然导入或导出的存在可能表示模块,但缺少导入或导出并不能清楚地表明该文件不是模块.因此,在解析过程中没有有效的方法来自动检测文件是否为模块. "* (6认同)
  • 究竟什么是“模块”?我在仅包含“使用严格”的脚本上收到“严格”错误(使用 [AirBnB 预设](https://www.npmjs.com/package/eslint-config-airbnb-base));console.log('foo')`。那是一个模块吗? (2认同)