ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの基礎知識まとめ (9) スコープとスコープチェーンの絶妙な解説
今回は JavaScript の基礎知識まとめをお届けします。
スコープの詳細
[[scope]]: すべての JavaScript 関数はオブジェクトです。オブジェクト内の一部のプロパティにはアクセスできますが、一部のプロパティにはアクセスできません。これらのプロパティは JavaScript エンジンからのみアクセス可能であり、[[scope]] もその 1 つです。
[[scope]] は実行時コンテキストのコレクションを保存するスコープと呼ばれるものを指します
スコープ チェーン: [[scope]] に保存される実行コンテキスト オブジェクトのコレクション、このコレクションはチェーン タイプ リンクです。このチェーンリンクスコープチェーンを呼び出します
実行コンテキスト: 関数が実行されると、実行コンテキストと呼ばれる内部オブジェクトが作成されます。実行コンテキストは、関数が実行されるときの環境を定義します。対応する実行コンテキストは関数が実行されるたびに一意であるため、関数を複数回呼び出すと、関数の実行が完了すると複数の実行コンテキストが作成されます。実行コンテキストは破棄されます
変数を検索します: スコープ チェーンの先頭から下方向に検索します
function a() { function b(){ var b = 234; } var a = 123; b(); }var glob = 100; a();
まず、上の関数を見てみましょう。これは全体的な関数であり、a はグローバル スコープ内にあり、次にこの変数の下に glob があります。次に、この a を使用して実行されます。
ステップ 1: まず、システムが認識するのは、a が定義されている場合、この [[スコープ]] を持つことになります。この Position 0 は GO を指します
Activation Object
0 はこのテーブルを指します
a / [[scope]] scope指向scope chain scope chain scope指向这里1 はこのテーブルを指します
this window window (object) document (object) a (function) glob 100 [[scope]]里面有这个全局的执行期上下文,然后a被执行了,a被执行,a产生的这个AO,把自己的AO存到作用域链的最顶端,形成一个新的作用域链,现在的a的[[scope]]和刚才的那个[[scope]]不一样了 a / [[scope]] scope指向scope chain scope chain scope指向这里ただ違うだけで、そこに格納されている値が [[scope]] またはその [[scope]] については、現時点では次のことは見ていません。この時点で変数にアクセスすると、a の [[scope]] にアクセスし、a の [[scope]] から情報を取得します。 . A のスコープは倉庫であり、このライブラリにスコープ チェーンが格納されており、何かを取得しに行くときにその上と下を見ます。 すると、a の実行により b の定義が得られます。A は b の実行後にのみ定義できます。b が定義されると、自然な [[scope]] が存在し、[[scope]] にはそれが持つべきものが格納されます。スコープ チェーンですが、そのスコープ チェーンは a のスコープ チェーンとは異なります。 a が定義されている場合、それはグローバルにあり、アクセスできる唯一の属性は独自の AO とグローバル GO ですが、b は a に定義されています。関数なので、b の [[scope]] は自身の AO だけでなく a の AO にもアクセスでき、グローバル GO
this window arguents [] a 123 b (function) Global Object
スコープを指します
0 この位置の 0 は自分の AO を指します 1 この位置の 1 は自分の AO を指します 2 この位置の 0 は GO を指します
アクティベーションオブジェクト
this window window (object) document (object) a (function) glob 1001 はこのテーブルを指します
b / [[scope]]1 はこのテーブルを指します
this window arguents [] b 234; Activation Object
bが実行されると、自分のaoを破棄し、定義状態に戻り、次の実行を待ちます
bは関数aの最後の文なので、bが実行されるとaも破棄され、bの[[scope]]も破棄されて定義状態に戻り、次回実行されるのを待ちます
this window arguents [] a 123 b (function) Global Object
ということで外部関数は
内部関数JavaScriptの基礎知識まとめ(6) 関数、初期スコープ(その2)
JavaScriptの基礎知識まとめ(7) 再帰JavaScriptの基礎知識まとめ(8)プリコンパイルの実行プロセス
以上がJavaScriptの基礎知識まとめ (9) スコープとスコープチェーンの絶妙な解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。