一部のC様プログラミング言語では、Curly Bracesの各コードには独自の範囲があり、変数はコードセグメントの外側でそれらを宣言する見えません。ブロックスコープを呼び出しますが、JavaScriptにはブロックスコープはありません。代わりに、JavaScriptは関数スコープを使用します。変数は、それを宣言する関数本文で定義され、関数本文にネストされた関数本文が定義されます。次のコードでは、異なる場所で定義されたI、J、およびKが同じ範囲内で定義されています。
コードコピーは次のとおりです。
関数テキスト(o)
{
var i = 0;
アラート(typeof o);
if(typeof o == "string")
{
var j = 0;
for(var k = 0; k <10; k ++)
{
アラート(k); //出力0-9
}
アラート(k); //出力10
}
アラート(j); //出力0
}
JavaScriptの関数範囲は、関数内で宣言されたすべての変数が関数本文で常に表示されることを意味します。興味深いことに、これは変数が宣言される前に利用可能であることを意味します。 JavaScriptのこの機能は非公式にHoistingと呼ばれます。つまり、JavaScriptの関数本体で宣言されたすべての変数(関与する割り当てなし)は、関数本体の上部に「高度」です。次のコードを見てください
コードコピーは次のとおりです。
var global = "globas";
functionGlobals()
{
アラート(グローバル); //未定義
var global = "hello qdao";
Alert(Global); // Hello Qdao
}
関数範囲の性質により、ローカル変数は常に関数本体全体に定義されます。つまり、関数ボディ内の変数は同じ名前のグローバル変数をカバーします。それにもかかわらず、プログラムがVARステートメントを実行すると、ローカル変数が本当に割り当てられます。したがって、上記のプロセスは次のものと同等です。関数の変数を関数本文の上部に「前進」し、元の位置に同僚変数の初期化を残します。
コードコピーは次のとおりです。
var global = "globas";
functionGlobals()
{
var Global;
アラート(グローバル); //未定義
global = "hello qdao";
Alert(Global); // Hello Qdao
}