[JS]厳格モードの機能は?


厳格なパターンとは?

  • 構文を厳密に適用し、エラーや最適化操作に問題が生じる可能性のあるコードに明示的なエラーを発生する
  • ESLintなどの印刷ツールでも同様の効果が得られる
  • ES 6導入のクラスとモジュールは基本的に適用
  • 'use strict;'命令語
  • ESLint

  • 静解析機能
  • ソースコード実行前に、構文/潜在的なエラーを見つける
  • エラー原因を知らせる
  • 適用方法

  • 全域リードまたは関数体リードuse strict;追加
  • コードをリードさせないと機能しない
  • スクリプト適用
  • 即時実行関数で囲まれたスクリプトユニットを推奨
  • 効果の適用


    -サイレント・グローバルの回避

  • 明らかでない変数を参照すると参照エラーが発生する

    戦いを黙示する


    宣言されていない変数を参照します.
    デフォルトでは、グローバルオブジェクト上でプロパティを動的に作成します.
  • function foo() {
      'use strict';
      
      x = 10; // ReferenceError: x is not defined
    }
    foo();

    -変数、関数、パラメータの削除を防止

  • delete演算子で変数、関数、パラメータを削除するとSyntaxErrorが生成されます
  • (function() {
      'use strict';
      
      var x = 1;
      delete x; // SyntaxError: Delete of an unqualified indentifier in strict mode.
    }());

    -重複しないパラメータ名

  • 重複パラメータ名を使用するとSyntaxエラーになる
  • -with文の使用禁止

  • ドア付き使用時に発生するSyntaxError
  • -一般関数のこの値->未定義

  • 一般関数内のthisバインドは定義されていません.
  • (function() {
      'use strict';
      
      function foo() {
        console.log(this);	// undefined
      }
      foo();
      
      function Foo() {
        console.log(this);	// Foo
      }
      new Foo();
    }());

    -argumentsオブジェクトを反映できません

  • パラメータに渡されたパラメータを再割り当てしてもパラメータオブジェクトに反映されない.