最終更新:2017-10-13 (金) 15:50:35 (2376d)  

Strictモード
Top / Strictモード

https://developer.mozilla.org/ja/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode

動作

  • strict モードでは、通常の JavaScript の意味にいくつかの変更を加えます。第一に strict モードでは、JavaScript でエラーではないが落とし穴になる一部の事柄を、エラーが発生するように変更することで除去します。第二に strict モードでは、JavaScript エンジンによる最適化処理を困難にする誤りを修正します

ミスからエラーへの変換

  • strict モードでは、従来は受け入れていた一部のミスをエラーに変更します。
    • 偶発的にグローバル変数?を作成できないようにします
    • 代入文で暗黙的に失敗せずに例外が発生するようにします
    • 削除できないプロパティを削除しようとするとエラーが発生します
    • オブジェクトリテラル内のプロパティ名はユニークであることを必須にします。
    • 関数の引数名がユニークであることを必須にします
    • 8進数表記を禁止します

変数の使用の単純化

  • コード中の変数名と特定の変数定義との対応づけ方法を単純化
    • with?を禁止
    • evalは新しい変数を周囲のスコープに広めません
    • 単純名の削除を禁止します
      • delete name を構文エラーにします

evalおよびargumentsの単純化

  • arguments および eval の奇妙さを低減します
    • eval および arguments という名前に対して言語構文でのバインドや代入を不可にします
    • 内部で作成された arguments オブジェクトのプロパティがエイリアスになりません
    • arguments.calleeをサポートしません。

JavaScript の "セキュア化"

  • thisとして関数に渡された値をオブジェクトへボクシングしません
  • ECMAScript の一般的な実装である拡張を通して JavaScript のスタックを "渡り歩く" ことができません。
  • arguments は対応する関数の呼び出し時の変数にアクセスできません
    • arguments.callerは書き込みや読み出し時にエラーが発生する、削除不可のプロパティです

参考

将来の ECMAScript への準備

  • いくつかの識別子を予約語にします
  • スクリプトのトップレベルまたは関数内にないfunction文?を禁止します。

関連