javascript変数:グローバル?局部ですか?これは注意が必要です


JSには、ブロックレベルのスコープがありません.
      二つの例を挙げます.
      if文ブロック:   
if (true){
	var name='Ling';
}
alert(name);
出力:Ling
      文のブロック;  
for(var i=0;i<10;i++) {
	var name='Ling';
}
alert(i);
alert(name);
出力:10
出力:Ling
つまり最後の結果はwindowの下のグローバル変数です.
<span style="font-family:KaiTi_GB2312;">alert(window.i);
alert(window.name);</span>
      Javascriptの関数体には、以下のようないくつかの状況があります.
      1、Varの有無
        Varがある場合は、関数内部で変数が局所変数であることを宣言します.以下の例では、nameのデータは読み込めません.
<span style="font-family:KaiTi_GB2312;">function box(){
	var name ='Ling';
}
alert(name);</span>
        varを削除すると、Lingが出力されます.このとき宣言された変数はグローバル変数です.コードを書く過程で、varを適用しないで初期変数にすると、多くの予期せぬことが発生しますので、初期変数の時は必ずvarを加えます.
     
       2、グローバル変数とローカル変数の名前は同じです.   
<span style="font-family:KaiTi_GB2312;">var scope="global";  
function t(){  
    alert(scope);  
    var scope="local"  
    alert(scope);  
} </span>
    最終的な出力結果は:
               undefined
               local
 
   なぜこのような結果が出たのですか?なぜなら、
   javascript変数範囲(1)グローバル変数のスコープは大域的な役割領域であり、Javascriptプログラム全体において、グローバル変数の役割は至るところに存在します.「script」ブロックにおいて、「function」関数の外に定義されます.(2)局所変数のスコープは局所的であり、関数内部または関数パラメータの場合に定義され、作用範囲は関数から末尾まで(ここで説明します)(3)関数内部であり、局所変数の優先度は同じ名前の大域変数よりも高いです.大域変数名と同じローカル変数(パラメータを含む)が存在すると、大域変数は機能しなくなります.
    
  もとはこの原因です.分かりましたか?
  
  グローバル変数とローカル変数の名前を変更すると、この問題はどう解決されますか?
  
  ははは~~一番簡単なのは、グローバル変数とローカル変数の出会いを避けることです.
  
  もう一つの方法があります.windowオブジェクトのすべての属性はグローバルスコープを持っています.window.グローバル変数名は次の通りです.
 
<span style="font-family:KaiTi_GB2312;">var scope="global";  
function t(){  
    alert(window.scope);  
    var scope="local"  
    alert(scope);  
}  </span>
これで問題も終わりです.
  締め括りをつける
上の問題は実は反映されているもう一つの問題です.ネーミング規範の問題は、ネーミングが規範化されていないと、多くの予想外の問題が発生します.だから、時間をかけてインターネットを利用して、いくつかの異なるネーミングのルールを調べてみます.このようにコードを作成する時、不要な面倒を減らすことができます.