ES6で「厳密な使用」を使用することはお勧めしませんか?


200

ECMAScript 6にはまだ慣れていません。アプリケーションコードにES6を使用するReact Starter Kitリポジトリのクローンを作成しました。リンターがディレクティブの発生を禁止するように構成されていることを知って驚きましたuse strict。これは、ES6より前のJavaScriptで推奨されていたものだと思いました。それで、ポイントは何ですか?



回答:


257

ES6モジュールは常に厳密モードです。仕様の関連部分を引用するに

10.2.1厳格モードコード

ECMAScriptスクリプト構文単位は、無制限モードまたは厳密モードの構文とセマンティクスを使用して処理できます。次の状況では、コードはストリクトモードコードとして解釈されます。

  • Use Strictディレクティブを含むディレクティブプロローグで始まる場合、グローバルコードはストリクトモードコードです(14.1.1を参照)。
  • モジュールコードは常に厳密なモードコードです。
  • ClassDeclarationまたはClassExpressionのすべての部分は、厳密なモードコードです。
  • Evalコードは、Use Strictディレクティブを含むディレクティブプロローグで始まる場合、またはevalの呼び出しがストリクトモードコードに含まれるダイレクトeval(12.3.4.1を参照)である場合、ストリクトモードコードです。
  • 関連するFunctionDeclaration、FunctionExpression、GeneratorDeclaration、GeneratorExpression、MethodDefinition、またはArrowFunctionが厳密モードコードに含まれている場合、または関数の[[ECMAScriptCode]]内部スロットの値を生成するコードがディレクティブプロローグで始まる場合、関数コードは厳密モードコードです。 Use Strictディレクティブが含まれています。
  • 組み込みのFunctionおよびGeneratorコンストラクターへの引数として提供される関数コードは、最後の引数が、処理時にUse Strictディレクティブを含むディレクティブプロローグで始まるFunctionBodyである文字列である場合、厳密モードコードです。

11
グローバルコードとモジュールコードの違いは何ですか?私が誤解していると思うのは、モジュールコードは、( 'module')が必要な場合にmodule.jsのすべてを意味するからです。
May Oakes、2015年

8
@BrynnMahsman ES2015にはネイティブモジュールがあります。CommonJSは単なるライブラリであり、言語とは何の関係もありません。
キットSunde、2015年

18
御返答いただき有難うございます。インポート/エクスポートキーワードを使用しない場合、ES6モジュールではないのですか?現在、ノード4を使用していますが、インポート/エクスポートキーワードにアクセスできません。デフォルトで有効になっているES6機能とともにCommonJS module.exportsおよびrequire()を使用しています。それは私がすべてのファイルの先頭にstrictを置かなければならない理由を説明します。それで、技術的に私はまだV8でいくつかのES6機能を有効にしてCommonJSモジュールを書いていますか?
May Oakes、2015年

7
「モジュールなのか」の詳細な検討は 、nczonline.net / blog / 2016/04 / …を
ptim 2017

1
「モジュール」とは正確には何ですか?私が手strict(とエラーAirBnBプリセットをのみで構成されたスクリプトに)"use strict"; console.log('foo')。それはモジュールですか?
Dan Dascalescu 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.