JavaScriptの役割ドメインとブロックレベルの役割ドメイン
1819 ワード
任意の一対のカッコ内の文セットはブロックに属し、この中で定義されたすべての変数はコードブロックの外では表示されません.ブロックレベルの役割ドメインと呼ばれています.
役割ドメインは、変数とパラメータの可視性とライフサイクルを制御するため、どのプログラミング言語でも重要です.ここでは,まず2つの概念を理解する:ブロックレベルの役割ドメインと関数の役割ドメイン.
ブロックレベルの役割ドメインとは何ですか?
任意の一対のカッコ({と})の文セットはブロックに属し、この中で定義されたすべての変数はコードブロックの外では見えません.ブロックレベルの役割ドメインと呼ばれます.
関数の役割ドメインがわかりやすくなりました(_)、関数に定義されたパラメータと変数は、関数の外部では表示されません.
ほとんどのクラスC言語はブロックレベルの役割ドメインを持っているが、JSは持っていない.次のdemoを参照してください.
このコードを実行すると、「use an undefined variable:j」というエラーが発生します.C言語は、jがifの文ブロックで定義されているため、ブロック外ではアクセスできないブロックレベルの役割ドメインを持っていることがわかります.
JSはどのように表現されているのか、もう一つのdemoを見てみましょう.
このコードを実行すると、「3」がポップアップされ、ブロックの外では、ブロックで定義された変数iがアクセス可能であることがわかります.すなわち、JSはブロックレベルの役割ドメインをサポートしておらず、関数の役割ドメインのみをサポートし、1つの関数の任意の位置で定義された変数は、その関数の任意の場所で表示されます.
では、JSにブロックレベルの役割ドメインを持たせるにはどうすればいいのでしょうか.1つの関数で定義された変数を覚えていますか.この関数が呼び出されると、変数が破棄されます.この特性でJSのブロックレベルの役割ドメインをシミュレートできますか.次のDEMOを見てください.
このとき再び実行すると、「i」の定義されていないエラーがポップアップされます.ははは、実現したでしょう.ここで、for文ブロックを閉パケットに入れて、この関数を呼び出します.関数呼び出しが完了すると、変数iが自動的に破棄されます.そのため、ブロックの外では質問できません.
ブロックレベルの役割ドメインを持つ言語では、for文が変数を初期化する式で定義された変数は、ループ環境にのみ存在します.JavaScriptでは、for文によって作成される変数iは、forループ実行が終了しても環境外部の実行環境に存在する.
JSの閉パッケージ特性is the most important feature()みんな知っています.JSでは,ネーミング競合を防止するために,グローバル変数とグローバル関数の使用をできるだけ避けるべきである.では、どうやって避けるのでしょうか.はい、上記のdemoに示すように、定義するすべての内容を1つに入れることができます.
では、このとき、私たちはそれらの外層に関数の役割ドメインを追加することに相当しますか?この役割ドメイン以外のプログラムはアクセスできません.
役割ドメインは、変数とパラメータの可視性とライフサイクルを制御するため、どのプログラミング言語でも重要です.ここでは,まず2つの概念を理解する:ブロックレベルの役割ドメインと関数の役割ドメイン.
ブロックレベルの役割ドメインとは何ですか?
任意の一対のカッコ({と})の文セットはブロックに属し、この中で定義されたすべての変数はコードブロックの外では見えません.ブロックレベルの役割ドメインと呼ばれます.
関数の役割ドメインがわかりやすくなりました(_)、関数に定義されたパラメータと変数は、関数の外部では表示されません.
ほとんどのクラスC言語はブロックレベルの役割ドメインを持っているが、JSは持っていない.次のdemoを参照してください.
//C
#include
void main()
{
int i=2;
i--;
if(i)
{
int j=3;
}
printf("%d/n",j);
}
このコードを実行すると、「use an undefined variable:j」というエラーが発生します.C言語は、jがifの文ブロックで定義されているため、ブロック外ではアクセスできないブロックレベルの役割ドメインを持っていることがわかります.
JSはどのように表現されているのか、もう一つのdemoを見てみましょう.
functin test(){
for(var i=0;i<3;i++){
}
alert(i);
}
test();
このコードを実行すると、「3」がポップアップされ、ブロックの外では、ブロックで定義された変数iがアクセス可能であることがわかります.すなわち、JSはブロックレベルの役割ドメインをサポートしておらず、関数の役割ドメインのみをサポートし、1つの関数の任意の位置で定義された変数は、その関数の任意の場所で表示されます.
では、JSにブロックレベルの役割ドメインを持たせるにはどうすればいいのでしょうか.1つの関数で定義された変数を覚えていますか.この関数が呼び出されると、変数が破棄されます.この特性でJSのブロックレベルの役割ドメインをシミュレートできますか.次のDEMOを見てください.
function test(){
(function (){
for(var i=0;i<4;i++){
}
})();
alert(i);
}
test();
このとき再び実行すると、「i」の定義されていないエラーがポップアップされます.ははは、実現したでしょう.ここで、for文ブロックを閉パケットに入れて、この関数を呼び出します.関数呼び出しが完了すると、変数iが自動的に破棄されます.そのため、ブロックの外では質問できません.
ブロックレベルの役割ドメインを持つ言語では、for文が変数を初期化する式で定義された変数は、ループ環境にのみ存在します.JavaScriptでは、for文によって作成される変数iは、forループ実行が終了しても環境外部の実行環境に存在する.
JSの閉パッケージ特性is the most important feature()みんな知っています.JSでは,ネーミング競合を防止するために,グローバル変数とグローバル関数の使用をできるだけ避けるべきである.では、どうやって避けるのでしょうか.はい、上記のdemoに示すように、定義するすべての内容を1つに入れることができます.
(function (){
//
})();
では、このとき、私たちはそれらの外層に関数の役割ドメインを追加することに相当しますか?この役割ドメイン以外のプログラムはアクセスできません.