前のセクションでスコープについて説明しました。これは、変数を検索し、現在実行中のコードの変数へのアクセス権を決定する方法を規定します。 ; また、静的スコープは字句スコープであり、コンパイル段階で決定される変数の参照です(コードの実行順序に関係なく、プログラム定義の位置によって決定されます)。ネストされた方法で解析されます)。
var x=10; function run(){ var name='Joel'; console.log(x+name);//10Joel 这里做了隐适转换 当有+时有一个为string 那么会当做字符拼接来处理 } run();
上記のコードに示されているように、run 関数を実行すると、run スコープに name 変数が存在しますが、変数 x がレポートされないのはなぜですか?アクセスされましたか?親 関数のスコープ で変数を探すことだと理解している人もいるかもしれませんが、実際、この方法でスコープを理解することには曖昧さがあります (関数の親関数を呼び出していると理解されている場合は、それがわかります)。は明らかに間違っています (次のコード))、前のセクションでは、javascript のスコープは静的スコープである、つまり、 はコード定義の場所ではなくコード定義の場所を考慮する必要があると述べました。呼び出し (字句スコープ);
var x=10; function fn(){ console.log(x); } function show(f){ var x=20; (function(){ f() }()); } show(fn);//10 并不是20
を導きます スコープ チェーンを理解するための変数分析
var a=10; function run(){ var name='Joel'; function say(){ var content='hello'; console.log(content+name+','+a); } say(); } run();//helloJoel,10
前の記事から、js スコープにはグローバル スコープがあることが分かりました。
グローバル スコープ: 変数 a と run 関数参照があります。もちろん、他の関数と 属性 もあります (組み込みのものについては説明しません) );
関数のスコープには変数名と関数の参照があります;
関数のスコープには変数の内容があります; コードは console.log(content+name+','+a); に実行されます。まず、say 関数のスコープ内で変数の内容、名前、および a を検索します。見つからない場合は、変数 a が存在する場合は、前のスコープまで検索します。現在のsayスコープで見つからない場合は、runスコープで検索されます。見つからない場合は、「定義されていません」というエラーが報告されます。グローバル スコープは最も外側のスコープです。
say 関数で変数名を定義した後は、変数名が Say 関数内にあるため、name の値は run スコープの値ではなくなります。スコープ。検索は続行しません
<script> var a=10; function run(){ var name='Joel'; function say(){ var content='hello',name=' Word'; console.log(content+name+','+a); } say(); } run();//hello Word,10 </script>
このプロセスを要約しましょう:
最初のステップは、現在のスコープ内で変数を見つけ、存在する場合はそれを取得して停止します。そうでない場合は、前のスコープの検索を続行します。
2 番目のステップは、現在のスコープがグローバル スコープである場合、変数が未定義であることを意味します。それ以外の場合は、続行します。スコープ、つまり関数スコープ) 最初のステップに進みます
それでは、スコープ チェーンとは何でしょうか?
実際、スコープ チェーンは本質的に変数オブジェクトを指すポインターのリンクされたリストです。変数オブジェクトの値を参照するだけで、実際には含まれません。
上記のコードのスコープ チェーン構造は次のようになります。
この記事ではスコープ チェーンを紹介するだけです。次の記事では、変数オブジェクト、アクティブ オブジェクト、スコープ チェーンなどが関与する実行環境について正式に説明し、スコープの作成プロセスに入ります。鎖。最初に実行環境を記述する必要がある理由は、完全なスコープ チェーンが実行環境で構築されるためです。
以上がJavaScript のスコープチェーンの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。