実行コンテキスト

3420 ワード

実行コンテキスト


実行コードに指定する環境情報を含むオブジェクト.
JavaScript動的言語としての特性を最も理解できる概念
JAvascriptは、実行コンテキストがアクティブな場合、宣言された変数を上にドラッグ(起動)、外部環境情報の構成、この値の設定などの操作を行います.
これは他の言語では発見できない特殊な現象を生んだ.

スタック


1つの入口のみの深井戸データ構造.
データa,b,c,dを順番に空のスタックに格納すると、取り出し時にd,c,b,aの順番でしか取り出すことができない.

キュー


両端に開いているパイプ
タイプによっては、両方のキューが入力および出力できますが、通常は1つのキューが入力のみを担当し、1つのキューが出力のみを担当します.データa,b,c,dが格納されている場合は、取り出す際にはa,b,c,dの順に取り出す.

自動的に生成されるグローバル空間とevalに加えて、実行コンテキストを構成する方法は、関数を実行する方法のみです.
!-- ブロックは、新しい実行コンテキストを生成します.
// ----- (1)
var a = 1;
function outer() {
  function inner() {
    console.log(a); // undefined
    var a = 3;
  }
  inner(); // ----- (2)
  console.log(a); // 1
}
outer(); // ----- (3)
console.log(a); // 1

  • (1)javascriptを初めて実行した瞬間、グローバルコンテキストがcallスタックに含まれる

  • (3)JavaScriptエンジンはouter()に関する環境情報を収集し,outer実行コンテキストを生成してcallスタックに入れる.呼び出しスタックの上部にouterがあり、グローバルコンテキストの実行を一時停止し、outerコンテキストに関連するコード、すなわちouter関数の内部コードを順次実行します.

  • (2)内部関数の実行コンテキストが呼び出しスタックの一番上にあるため,外部コンテキストのコード実行を一時停止し,内部関数の内部コードを継続する.

  • 内部でaの値に3を割り当てると、内部関数の実行が終了するにつれて呼び出しスタックから削除されます.

  • 中断した(2)の次の行から実行を開始します.

  • console.aの値をlogで出力するとouter関数の実行が終了しcallスタックから削除されます.

  • 中断した(3)の次の行から実行を開始する.

  • console.aの値をlogで出力します.
  • コード内部に個別の実行コマンドがなくても、トップレベルのスペースはブラウザで自動的に実行されるので、JavaScriptファイルを開くだけでグローバルコンテキストがアクティブとみなされます.