モチベーション
code reviewをして貰ったときに、「ES Modulesを使うと、暗黙的に 'use strict' 付きますよ」というコメントを頂いた。'use strict' になる条件を全然把握していないので、ちょっと資料を読んでみた。
読んだ資料
ECMAScript® 2015 Language Specification
http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-code
分かったこと
- Global codeが、Strict Directive ( 'use strict' のこと )を含むDirective Prologueで始まるなら、strict mode codeである。
- Module codeはいつでも strict mode codeである。
- ClassDeclaration、またはClassExpressionの全ての部分は、strict mode codeである。
- strict directive を含む場合、evalの中身も strict modeになる。
- 関連する FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefinition, ArrowFunctionがstrict mode codeを含んでいるならば、functionのcodeも strict modeなcodeになる。
- 引数にcode strictされているfunctionがある場合、それを受け取るfunctionもcode strictになる