変数とパラメーターの可視性とライフサイクルを制御するため、範囲は常にプログラミング言語で最優先事項です。これについて言えば、最初にブロックレベルの範囲と関数範囲の2つの概念を理解します。
ブロックレベルのスコープとは何ですか?
Curly Braces({および})の任意のペアに設定されたステートメントは、ブロックに属し、これで定義されているすべての変数は、ブロックレベルのスコープと呼ばれるコードブロックの外側に見えません。
関数の範囲は理解しやすく(*^__^*)、関数で定義されているパラメーターと変数は関数の外側に見えません。
ほとんどのCクラス言語にはブロックレベルのスコープがありますが、JSはそうではありません。以下のデモをご覧ください。
// c言語#include <stdio.h> void main(){int i = 2;私 - ; if(i){int j = 3; } printf( "%d/n"、j); }このコードを実行すると、「未定義の変数:j」というエラーが表示されます。ご覧のとおり、jはifのステートメントブロックで定義されているため、ブロックレベルの範囲があるため、ブロックの外側でアクセスできません。
JSの実行方法は、別のデモを見てみましょう。
functin test(){for(var i = 0; i <3; i ++){} alert(i); } テスト();このコードを実行し、「3」がポップアップします。ブロックの外側では、ブロックで定義した変数にまだアクセスできることがわかります。つまり、JSはブロックレベルのスコープをサポートせず、関数スコープのみをサポートし、関数のどこにでも定義されている変数はその関数のどこにでも表示されます。
では、どのようにしてJSにブロックレベルのスコープを持たせるのでしょうか?関数で定義されている変数が呼び出されると、変数が破壊されることを覚えていますか?この機能を使用して、JSのブロックレベルスコープをシミュレートできますか?次のデモを見てください。
function test(){(function(){for(var i = 0; i <4; i ++){}})();アラート(i); } テスト();この時点でもう一度実行すると、「I」の未定義のエラーがポップアップします。ハハ、それは実装されています~~~ここで、私たちはforステートメントブロックを閉鎖に入れて、この関数を呼び出します。関数呼び出しが完了すると、変数Iが自動的に破壊されるため、ブロックの外側にアクセスできません。
JSの閉鎖機能は、誰もが理解している最も重要な機能(*^__^*)です。 JSでは、競合の命名を防ぐために、グローバル変数やグローバル機能の使用を避けるように努める必要があります。それで、それを避ける方法は?わかりました、上記のデモに示されているように、私たちは1つに定義したいすべてを置くことができます
(function(){// content})();その中で、現時点では、外側の層に関数スコープを追加することに相当しますか?この範囲外のプログラムはそれらにアクセスできません。