主な内容:
1. JavaScript 字句スコープの意味を分析します
2. 変数のスコープチェーンを解析します
3. 変数名がプロモートされるとどうなりますか?
最近、Chuanzhi Podcast で JavaScript コースについて説明したところ、多くの友人が JavaScript はとても簡単だけど使い方が分からないと感じていたので、主に皆さんと共有するためのコンテンツをいくつか用意しました。 JavaScript の高度な部分には、スコープ チェーン、クロージャ、関数呼び出しパターン、プロトタイプ、オブジェクト指向などについて説明します。基礎を理解する必要がある場合は、学生は http://net にアクセスしてください。学習用の無料ビデオをダウンロードするには、itcast.cn にアクセスしてください。早速、トピックに進みましょう。
1. ブロックレベルのスコープについて
JavaScript の変数スコープに関しては、私たちが通常使用する C 系言語とは異なります。たとえば、C# では、次のコード:
ブロックレベルのスコープでは、すべての変数は定義の中括弧内にあり、定義の先頭から末尾までの
しかし、JavaScript では異なります。JavaScript にはブロックレベルのスコープという概念がありません。
2. JavaScript のスコープJavaScript では、次のコード:
2.1 関数による変数のスコープの制限
JavaScript では、関数のみが変数のスコープを制限できます。これはどういう意味ですか? つまり、JavaScript では、関数内で定義された変数には関数内でアクセスできますが、
には関数の外からアクセスできません。次のコードを参照してください。
コードをコピー
コードをコピーします
の子コードは親ドメインの変数にアクセスできます。以下のコードを参照してください:
このコードの実行結果は 10 です。ただし、次のコードに示すように、子ドメイン内の親ドメインの
コードへのアクセスも条件付きです。 🎜>
JavaScript で変数を使用する場合、JavaScript インタプリタはまず現在の
スコープ内で変数の定義を検索します。そうでない場合は、この変数が使用されます。親ドメインで変数を探します。
コードをコピーします
3. スコープチェーン
JavaScript のスコープを分割することで、JavaScript のアクセススコープをチェーンツリー構造に接続することができます。を明確に理解できれば、JavaScript の変数とクロージャも非常に明確になります。以下では、描画メソッドを使用してスコープ チェーンを描画します。
3.1 描画ルール: 1) スコープ チェーンはオブジェクトの配列です
2) すべてのスクリプトはレベル 0 チェーンであり、各オブジェクトは位置を占めます
3) いつでも関数がチェーンを拡張するときは、レベルごとに展開します
5) レベルまで繰り返します。 0 チェーン
3.2 例
次のコードを見てください:
コードをコピーします
コードは次のとおりです:
var link_2 = { func2: [ num ] };// 疑似コードを使用して
-> を記述します。 2 番目のレベル 1 チェーンは変数が定義されておらず、空のチェーンであるため、 var link_2 = { func3: [ ] };
-> 上記のコードを統合すると、スコープ チェーンは次のように表現できます。
コードをコピー
コードは次のとおりです。
-> represented by image as
Picture: 01_01 scope chain.bmp
Note: Use js code to express the chain diagram, and it will be very clear when highlighted.
With this diagram of the scope chain, you can clearly understand how to access variables:
When you need to use a variable, first look for the variable on the current chain, and if you find it, use it directly. It will not
look up again; if it is not found, then it will search up the one-level scope chain until the 0-level scope chain.
If you can clearly determine the level of the scope chain to which a variable belongs, it will be very easy when analyzing JavaScript
code and using advanced JavaScript features such as closures (at least for me) .
3. Variable name promotion and function name promotion
With scope chain and variable access rules, there is a very thorny problem. First look at the JavaScript code of
below:
What will be the execution result? You can think about it, I won’t reveal the answer yet.
Let’s analyze this code first.
There is a level 0 scope chain in this code, which has the members num and func. Under func is a level 1 scope chain, which has the member num. . Therefore, when the function func is called, it will be detected that the
variable num is defined in the current scope, so this variable will be used. However, num is not assigned a value at this time, because the code
is It runs from top to bottom. Therefore, the first print is undefined, and the second print is 20.
Did you get the answer right?
problem in JavaScript to define code like this at the back and use it in the front. At this time, it is as if the variable is defined at the beginning, and the result is like the following code:
I’ll answer the question in the next article.
That is, the variables are defined at the beginning of the function, similar to the regulations of C language. This This is also done in js libraries
, such as jQuery, etc.
4. Summary
Okay, this article mainly explains what the lexical scope of JavaScript is all about, and explains how to analyze the scope chain and variable access. Finally, let’s finish with one exercise! ! !