2.コンテキストの実行

4953 ワード

コアJavaScript 02実行コンテキスト

実行コンテキスト


  • ES 5では、同じ条件/環境(=実行コンテキストを構成する方法)のみが関数です.(グローバル空間も関数であると仮定)
    =>実行コンテキストは、関数の実行に必要な環境情報またはその情報を含むオブジェクト
  • を含む.
  • 実行コンテキストは、アクティブ化時にVariableEnvironment、LexicalEnvironment、ThisBindingの3つの情報を収集します.
  • ES 66はまた、ブロックによって新しい実行コンテキスト(ブロックスキャン...if文、繰り返し文など)
  • を作成する.

    コールスタック


  • 現在実行中の関数と、次に呼び出す必要がある関数を制御するデータ構造.

  • スタック:井戸のような構造.最後に入ってきたのは一番早く落ちた概念ですcallスタックは実行についてです.
  • VariableEnvironment

  • メキシコ環境の初期状態(スナップショット)
  • LexicalEnvironment

  • 関数の実行中の変更をリアルタイムで反映します.
  • 環境記録と転送

  • 環境レコードは、現在のコンテキストにおける識別子情報=すでに存在するタグ付き識別子情報を格納する.
  • パラメータ識別子、関数自体、varとして宣言された変数識別子
  • 護衛規則

  • 変数は宣言子であり、関数宣言は関数全体をハイライトします.
  • 関数式は、変数宣言子にのみ記号
  • を付ける.
  • 番転送終了時の関数宣言は、関数名として宣言された変数に関数が割り当てられていると考えられます.
    function b() {} //호이스팅된 함수 선언
    var b = function b() {} //함수명으로 선언한 변수에 함수 할당
  • 関数宣言文と関数式

  • 関数宣言:関数定義子のみが存在します.個別の割り当てコマンドはありません.
  • 関数式:定義された関数を別の変数
  • に割り当てる
  • 相対的に、関数式は安全です.
  • 関数宣言
  • function a() {~~}
    a(); //실행 OK
    関数式
    :変数名bが関数名
    var b = function () {~~}
    b(); //실행 OK 
    記名関数式
    :変数名c、関数名d
    var c = function d() {~~}
    c(); //실행 OK
    d(); //에러!

    外部環境リファレンス

  • 外部環境リファレンスは、前のコンテキストのLexicalEnvironmentReferenceを直接参照します.
  • スキャン:変数の有効範囲
  • スキャンチェーンScope Chain


  • 「識別子の有効範囲」を内側から外側に順に検索します.

  • 独自の環境レコードから識別子の検索を開始し、存在しない場合はOuterEnvironmentReferenceで1つずつ外に移動します.

  • 外部のスキャンマップに同じ識別子があっても、自分に最も近い識別子にしかアクセスできません.(非表示変数)

  • 外部環境リファレンスは、スキャンチェーンを可能にします.
    (内部の外部環境参照は外部のメキシコ環境)
  • 自身よりも外部関数の識別子に近づくことができるが、内部関数の識別子に近づくことはできない.

    グローバル変数とゾーン変数

  • グローバル変数:グローバル空間で宣言された変数
  • 領域変数:関数で宣言された変数
  • this

  • ランタイムコンテキストのthis Bindingは、指定したオブジェクトを保存します.
  • を使用可能にしてコンテキストを実行するときにこの値が指定されていない場合は、グローバルオブジェクトが保存されます.