JavaScriptプログラムの各バイトは、このまたはその実行コンテキストで実行されます。これらのコンテキストはコードの隣人と考えることができます。これは、コードの各行を示すことができます。はい、これは非常に重要な情報です。なぜなら、JavaScript Societyには誰と対話できるかを規定する非常に厳しい規則があるからです。運用コンテキストは、その中に開いている小さなドアの代わりに、ゲートがあるコミュニティです。
私たちは通常、これらの社会的境界をスコープと呼び、各隣人の憲章で立法をするのに十分な重要性を持つことができます。特定の近隣関係内で、コードはスコープチェーン内の変数のみにアクセスできます。近隣を超えた変数と比較して、コードはローカル(ローカル、つまりローカル)に対処することを好みます。
プログラミング言語には範囲の概念があります。簡単に言えば、スコープは変数と関数のアクセス可能な範囲です。つまり、スコープは変数と関数の可視性とライフサイクルを制御します。 JavaScriptの範囲は、常にフロントエンドの開発で理解するのが難しい知識ポイントでした。 JavaScriptの範囲を簡単に解決するためのいくつかの単語を覚えておいてください。
1。 "JavaScriptにブロックレベルの範囲なし"
JavaまたはC#にはブロックレベルの範囲があります。つまり、ブレースも範囲です。
public static void main(){if(1 == 1){string name = "7"; } system.out.println(name);} //エラーを報告しますpublic static void main(){if(1 == 1){string name = "7"; } console.writeline(name);} //エラーを報告しますJavaScriptにはブロックレベルの範囲はありません
function main(){if(1 == 1){var name = '7'; } console.log(name);} //出力:72。JavaScriptは関数範囲を採用します
JavaScriptでは、各関数はスコープとして機能し、内部範囲の変数に外部からアクセスすることはできません。
function main(){var innervalue = '7';} main(); console.log(innervalue); //エラー:cont coved referenceError:inneralValueは定義されていません3。JavaScriptスコープチェーン
JavaScriptの各関数はスコープであるため、機能ネストされた関数が表示されると、スコープチェーンが表示されます。
xo = 'alex'; function func(){var xo = "7";関数内(){var xo = 'alvin'; console.log(xo); } inner();} func();たとえば、上記のコードは、3つのスコープで構成されるスコープチェーンに表示されます。スコープチェーンが表示されると、変数を探すときに順序が表示されます。上記の例:
Console.log(XO)が実行されると、その検索注文は根据作用域链从内到外検索することになります。内側の層が存在しない場合、例外が見つからないまで徐々に見上げます。
4. JavaScriptのスコープチェーンは、実行前に作成されました
JavaScriptの範囲は、実行される前に作成されました。将来実行される場合、スコープチェーンに従って検索するだけです。
例1:
xo = 'alex'; function func(){var xo = "7"; function inner(){console.log(xo); } return inner;} var ret = func(); ret(); //出力結果:7上記のコードは、関数が呼び出される前にすでに存在します。
グローバルスコープ - > FUNC関数スコープ - >内部関数スコープ
[ret();]を実行すると、内部関数を指すため、この関数のスコープチェーンは次のように定義されています。グローバルスコープ - > func関数スコープ - >内部関数スコープなので、[ret();]を実行すると、既存のスコープチェーンに基づいて変数が見つかります。
例2:
xo = 'alex'; function func(){var xo = "eirc"; function inner(){console.log(xo); } xo = '7'; return inner;} var ret = func(); ret(); //出力結果:7上記のコードには例1と同じ目的があり、関数が呼び出される前にスコープチェーンがすでに存在することも強調しています。
グローバルスコープ - > FUNC関数スコープ - >内部関数スコープ
違う場合、[var ret = func();]を実行すると、funcスコープのxo変数の値が「eric」から「7」にリセットされているため、[ret();]を実行すると、「7」しか見つけることができません。
例3:
xo = 'alex'; function bar(){console.log(xo);} function func(){var xo = "7"; return bar;} var ret = func(); ret(); //出力結果:alex上記のコードでは、関数が実行される前に2つのスコープチェーンが作成されました。
グローバルスコープ - >バー機能スコープ
グローバルスコープ - > FUNC関数スコープ
[ret();]を実行すると、RETはバー機能を指し、バー機能のスコープチェーンは既に存在します。グローバルスコープ - >バー機能スコープなので、実行すると、既存のスコープチェーンに基づいて検索されます。
5。事前のステートメント
変数を作成せず、JavaScriptで直接使用する場合、エラーが報告されます。
console.log(xxoo); //エラー:conged referenceError:xxooは定義されていません
JavaScriptでは、値を割り当てずに値を作成した場合、次のような値は未定義です。
var xxoo; console.log(xxoo); // output:function food foo(){console.log(xo); var xo = '7';} foo(); // output:undefined上記のコードはエラーを報告するものではなく、定義されていない出力を出力します。その理由は、JavaScript関数が実行される前に、値を割り当てることなく、それらのすべての変数を宣言するためです。したがって、「プリコンパイル」時に関数がvar XOをすでに実行していることは上記の例に相当します。したがって、上記のコードの出力は未定義です。
JSは非常に興味深い言語です。その機能の多くはHTMLでのDOMの操作を目的としているため、カジュアルで少し厳格ではないようです。ただし、フロントエンドの継続的な繁栄と開発とノードの台頭により、JSはJQuery時代の「おもちゃ言語」や「CSS拡張」ではなくなりました。この記事で言及されているのは、従来のWeb開発を行った初心者やJS開発者にとって混乱したり、誤解されたりするのは簡単です。この記事が役立つことを願っています。