JavaScriptのスコープとコンテキスト

関数定義が決定された範囲は、実行コンテキストは、場合にのみ、関数呼び出しを決定しています。グローバルスコープと関数スコープに実行コンテキスト(閉鎖がある場合、2つのコンテキストが存在する範囲がある)が作成されます。関数を呼び出すたびに、新しい実行コンテキストを生成します。しかし、アクティブな実行コンテキストは、それがプロセススタックのプッシュで、唯一のものです。

実行コンテキスト:別の呼び出しが異なるパラメータを持っている可能性があるため、関数は、新しい実行コンテキストを生成し、各回呼び出されます。

=せ10、FN、        // 1、グローバルコンテキストに 
     バー= 関数(X){ 
         LETのB = 5 
         、FN(X + B)      // 。3、コンテキスト関数fnへ
     } 
FN = 関数(Y){ 
    LET C = 5 
    にconsole.log(Y + C)
} 

バー(10// コンテキスト機能バーに2、

次のように最初の(コメント数1)は、コードの実行に先立って、第一グローバルコンテキスト(アクティブ)を作成します。

// グローバルコンテキスト
A:未定義
のFnを:未定義の
バー:未定義
このウィンドウを:

コードの実行を開始した後に、次の変数の文脈における先行ライン10のコードは、実行時に割り当てられています。

// グローバルコンテキスト 
A:10 
のFn:ファンクション・
バー:機能
このウィンドウを:

その後、バー(10)、関数は、次のように機能バーに関数本体文を実行する前に、新しい実行コンテキストを作成し、内側のバーにジャンプし、プッシュバーの実行コンテキストを実行します。

// バー実行コンテキスト
B:未定義
X:10個の
引数:[ 10 ]
 この:ウィンドウ

その後、3つのデジタルへのコメントとは、関数本体の文を実行する前に、次のように新しい実行コンテキストを作成し、スタックにFN実行コンテキスト、FN関数を呼び出し、そこに行います。

// のFn実行コンテキスト
C:不定
Y:15個の
引数:[ 15 ]
 :ウィンドウ

上段では、実行が完了した後、FNのFN機能は、コンテキストスタックを生成fnを、破壊されます。その後、バーが終了し、コンテキストバーの機能は、スタックが破壊されて生成さ呼び出します。そして、グローバルな文脈の残りの部分は、スタックが破壊されました。手順以下の図:

スコープ:JavaScriptではまた、スコープなど各機能のグローバルスコープに加えて、範囲外のスコープ内の変数にアクセスすることはできません。

スコープチェーン:あなたがいない場合、それは、外側のスコープに外層で検索する余地を模索しないだろう、変数の値、現在のスコープで最初見て取得したい場合は、それが発見されます以上、それは異常がスコープチェーンの形成には、見つけることができないと報告しました。

機能ネストした関数が表示された場合、スコープの各機能は、スコープチェーンが発生します。JavaScriptのスコープを使用すると、その後、実行した後に行くことができたときに探すためにのみスコープチェーンに従って、実行される前に作成されています。

無料変数:そのような変数、FN関数スコープではなく、FN・スコープ記述書で使用されているが、他のスコープ文で、これは自由変数です。

 

おすすめ

転載: www.cnblogs.com/xjy20170907/p/11423292.html