エンジンのJsコードは、'セクションの'実行する方法ではなく、行ごとに実行され、例えば:関数の実行時に、JSエンジンは、いくつかの準備作業を行います、そして、この準備作業は、コンテキストの実装と呼ばれ、コードのこのセクションは、コード以上のものではありません3種類のコードです:グローバルな実装コンテキスト、関数の実行コンテキスト、evalの実行コンテキスト
関数実行コンテキストは、関数呼び出し時に実行されます。関数定義時に定義される関数スコープとは正反対です。
- 変数オブジェクト
- スコープの連鎖
- this
変数オブジェクト
変数オブジェクトは、実行コンテキストに関連付けられたデータスコープであり、そのコンテキストで定義された変数や関数宣言を格納します。
スコープの連鎖
変数が検索されるときは、現在のコンテキストから検索され、見つからなければ、親実行コンテキストオブジェクトからグローバルコンテキストオブジェクトまで検索されます。このように複数のコンテキストを持つ変数オブジェクトは、スコープチェーンと呼ばれる連鎖したリストを形成します。
this
thisバインディングはグローバル実行コンテキストと関数実行コンテキストに分けられます。
- グローバル実行コンテキストでは、thisはグローバルオブジェクトを指します。
- 関数実行のコンテキストにおいて、thisの値は関数がどのように呼び出されるかに依存します。参照されているオブジェクトから呼び出された場合、this はそのオブジェクトに設定されます。「の値はグローバル・オブジェクトか未定義に設定されます。
実行プロセス
実行コンテキスト内のコードは、解析と実行の2つのフェーズで処理されます。
実行コンテキストに入る
まだコードを実行していない実行コンテキストに入ると、次の3つのことを行います。
- スコープの作成
- 変数、関数、パラメータの作成
- this'の値の決定
コードの実行
すべての変数の代入を完了し、最後にコードを実行します。
注意: 実行段階では、Javascriptエンジンがソースコードで宣言された実際の場所にlet変数の値を見つけることができない場合、未定義の値が代入されます。