JavaScriptの厳格モードとthisについて

JavaScriptの厳格モードとは

JavaScriptの厳格モード(strict mode)は、JavaScriptのより安全で、より予測可能なバージョンを提供するための一部です。厳格モードは、一部のJavaScriptのサイレントエラーをスローするエラーに変換し、JavaScriptエンジンがコードをより高速に実行するのを助ける困難な部分を修正します。

厳格モードを有効にするには、スクリプトの先頭または関数の先頭に 'use strict'; を追加します。これにより、そのスコープ(全体のスクリプトまたは個々の関数)で厳格モードが有効になります。

厳格モードでは、次のような一部のアクションが制限または変更されます:

  • 未定義の変数への代入はエラーになります(非厳格モードでは、新しいグローバル変数が作成されます)。
  • 読み取り専用のプロパティへの代入、不可削除のプロパティの削除、および既に存在する変数、関数、またはパラメータと同じ名前のパラメータを持つ関数の作成はエラーになります。
  • this の値は undefined(非厳格モードではグローバルオブジェクト)になります。

これらは、JavaScriptのコードをより安全にし、予期しない動作を防ぐための一部の例です。厳格モードは、より良いエラーチェックとより効率的なコード実行を可能にするため、新しいJavaScriptコードを書く際には常に使用することを推奨します。

thisの役割と挙動

JavaScriptの this キーワードは、実行コンテキストに基づいて異なるオブジェクトを参照します。つまり、this の値は、それがどのように呼び出されるかによって決まります。

以下に、this の一般的な使用例を示します:

  • グローバルコンテキストまたは関数内:非厳格モードでは、this はグローバルオブジェクト(ブラウザでは window)を参照します。しかし、厳格モードでは thisundefined になります。

  • メソッド内:メソッドの中で this を使用すると、そのメソッドを所有しているオブジェクトを参照します。

  • コンストラクタ内:コンストラクタ関数内で this を使用すると、新しく作成されるオブジェクトを参照します。

  • イベントハンドラ内:イベントハンドラ内で this を使用すると、そのイベントを受け取った要素を参照します。

これらのルールは、JavaScriptの this の基本的な挙動を示していますが、call()apply()bind() などのメソッドを使用すると、this の値を明示的に設定することができます。

this の挙動は、他の多くのプログラミング言語とは異なるため、JavaScriptを学ぶ際には混乱を招くことがあります。しかし、this の挙動を理解することは、JavaScriptの高度な概念を理解するために重要です。

厳格モードとthisの関係性

JavaScriptの厳格モード(strict mode)と this キーワードの関係性は、this の値がどのように決定されるかに大きく影響します。

非厳格モードでは、グローバルコンテキストまたは関数内で this を使用すると、this はグローバルオブジェクト(ブラウザでは window)を参照します。しかし、厳格モードを有効にすると、この挙動は変わります。

厳格モードでは、グローバルコンテキストまたは関数内で this を使用すると、thisundefined になります。これは、グローバルオブジェクトへの不意のアクセスを防ぐための重要な安全対策です。グローバルオブジェクトへの不意のアクセスは、予期しない副作用を引き起こす可能性があります。

したがって、厳格モードは this の挙動に大きな影響を与え、JavaScriptのコードをより安全にし、予期しない動作を防ぐ役割を果たします。

厳格モードでのthisの使用例

JavaScriptの厳格モードでは、this の挙動が変わります。以下に、厳格モードでの this の使用例を示します。

// 非厳格モードでの関数
function nonStrictFunction() {
    console.log(this);  // グローバルオブジェクト(ブラウザでは 'window')
}
nonStrictFunction();

// 厳格モードでの関数
function strictFunction() {
    'use strict';
    console.log(this);  // 'undefined'
}
strictFunction();

上記の例では、非厳格モードの関数内で this を呼び出すと、グローバルオブジェクト(ブラウザでは window)が出力されます。一方、厳格モードの関数内で this を呼び出すと、undefined が出力されます。

このように、厳格モードでは this の挙動が変わり、グローバルオブジェクトへの不意のアクセスを防ぐことができます。これは、予期しない副作用を防ぐための重要な安全対策です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール