TIL. 実行コンテキスト

2977 ワード

実行コンテキストとは?
実行するコードで提供される環境情報をまとめたオブジェクトは,JavaScript動的言語としての性質を最もよく知る概念である.
まずjavascriptは単一スレッド言語です.
JavaScriptエンジンがコードを読み込むときに実行する関数を見つけた場合、コンテキスト環境が作成されます.
以下に示す3つの情報が格納されている.
1. VariableEnvironment
2. LexicalEnvironment
3. thisBinding
この3つを説明する前に、JavaScriptの操作方法を理解する必要があります.
CallStackとEventQueueの2つの概念があります.
Javascriptエンジンがコードを再び読み取り、実行する必要がある関数を見つけた場合、コンテキスト環境を作成しcallstackに格納します.関数の変数が昇格し、順次実行されます.重複する関数がある場合はcallstackに積み上げます.stackは入る順序ではなく、最後に入る順序の最初の順序で実行されます.
EventQueueはJavaScriptエンジンが実行する必要がある関数を保存する場所です.
JavaScriptエンジンは入力された順序でCallStackとEventQueueをチェックし、CallStackが空の場合はEventQueueのイベント関数をCallStackにプッシュします.
コンテキスト環境に格納されている3つの態様を返し、理解します.
1.VariableEnvironment:現在のコンテキスト内の識別子の情報+外部環境情報、および宣言時のLexicalEnvironmentに変更を保存しません.

  • LexicalEnvironment:VariableEnvironmentを作成し、変更をコピーして適用します.

  • thisBinding:ターゲットオブジェクトを表示する識別子が必要です.
  • 関数宣言文と関数式
    //1.
    function a () {}
    a() //실행 ok 함수선언문. 함수명 a가 곧 변수명
    
    //2.
    var b = function () {}
    b() //실행 ok 익명 함수 표현식. 변수명 b가 곧 함수명
    
    //3.
    var c = function d () {}
    c() //실행 ok 기명 함수표현식. 변수명은 c, 함수명은 d
    d() // ERROR !! 
    ここで注意すべき点は,a b cは昇格対象であるがdではない.
    スコフ&スコフチェーン
    識別子の有効範囲として、関数の実行時に生成されます.
    スコフ氏によると、関数の外の変数は中の関数からアクセスできるが、関数の中の変数は関数の外からアクセスできない範囲だという.
    したがって,変数に近づくと,まず対応する走査範囲内で変数を探索し,そうでなければ位相走査を用い,そうでなければ探索プロセスを走査チェーンと呼ぶ.