javascript白学習ガイドのテーマ--執行文脈スタック

5344 ワード

前回のテーマについて私たちはjavascriptの役割領域について話しました.今回は派閥の地盤のようなものを知っています.執行文脈について説明します.一部の本の中には執行環境というものもあります.まずいくつかの簡単な例を見ます.
console.log(csdn);              ?
*****************************************
console.log(csdn);              ?
var csdn;
*****************************************
console.log(csdn);              ?
var csdn = tomihaohao;
答え:1.直接エラーを出しました.2.undefined 3.undefined
ここではいくつかの知識点に関連しています.最初のjavascriptは実行時の変数の割り当て値で、第二の変数のアップグレードが一番上にあります.
最初に言ってみましたが、ここでまとめてみました.jsの中の賦値がないことが分かりました.最初は変数でも関数式でもいいです.関数式に注意してください.最初はundefinedに値が与えられます.thisと関数の声明は直接に値を割り当てます.すなわち、この割り当ての段階はコンテキストを実行するか、または実行環境と呼ばれます.
第二の知識点は変数の頂上という意味です.
console.log(csdn); 
var csdn = tomihaohao;
******************************
    
var csdn;
console.log(csdn);
csdn = tomihaohao;
以下は関数の実行文脈を見てみます.
function csdn(a){
    console.log(arguments); //[10]
    console.log(a);//10
}
csdn(10);
ここからは、関数が呼び出されるたびに、新しいコンテキスト実行環境が生成されます.
次は面白いものを見ています.
var a = 10;
function csdn(){
    console.log(a);
}
function tomihaohao(f){
    var a = 20;
    f();//   10    20;
}
tomihaohao(csdn);
なぜ10が20ではないかを覚えてください.関数は定義時に定義されていることに注意してください.呼び出しではなく、関数内部の自由変数の作用領域が確定されています.
まとめてみましょう.
実行環境は、変数や関数がアクセスできる他のデータを定義し、それぞれの挙動を決定します.各実行環境には、関連する変数オブジェクトがあり、環境で定義されているすべての変数と関数がこのオブジェクトに保存されます.私たちが作成したコードはこのオブジェクトにアクセスできませんでしたが、解析器はデータを処理する際にバックグラウンドで使います.
簡単に言えば、コードを実行する前に必要な変数を全部出して、一回の価値を賦課します.直接の賦課もあれば、undefinedという直接の賦課もあります.
上にはすべてのコンテキストの内容がありますが、JSコードを実行する際には、多くのサブ関数を呼び出して、複数の実行コンテキスト環境を生成します.コンテキスト環境を実行するには、どのように処理すればいいですか?
ここから始めます.コンテキストスタックの実行を紹介します.
グローバルコードを実行すると、コンテキスト環境を実行するたびに、関数の呼び出しが完了すると、このコンテキスト環境とデータの次の例を見てみましょう.
var a = 10;
var fn-1;
var fn-2 = function(){ return 15; };
fn-1 = function(){ var b = fn-2() return b; };
fn-1();

                    
a:undefined;
fn-1:undefinded;
fn-2:undefined;
this:window;

             ,                    
a:10;
fn-1:function;
fn-2:function;
this:window;

                    fn-1      fn-1         
a:10;
b:undefined
fn-1:function;
fn-2:function;
this:window;

    fn-1           fn-2           fn-2     , fn-2            fn-1     ,fn-1