関数定義が決定された範囲は、実行コンテキストは、場合にのみ、関数呼び出しを決定しています。グローバルスコープと関数スコープに実行コンテキスト(閉鎖がある場合、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・スコープ記述書で使用されているが、他のスコープ文で、これは自由変数です。