javascript変数のスコープ


変数のスコープは変数の視認性を指しますが、ライフサイクルは別の角度から変数を調べます.
 
jsにおける変数の作用領域は、大域変数と局所変数に分けられ、関数内で定義されたものを局所変数と呼び、関数外のものを大域変数と呼びます.(「関数外のグローバル変数」は相対的であり、またここで議論する前提はvar明示的に宣言する変数であり、関数内でvar定義しない変数はデフォルトはグローバル変数であり、もちろんvar宣言変数を無視するのは不賛成である).
 
<!DOCTYPE HTML>
<html>
  <head>
    <title>test1.html</title>	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <script type="text/javascript/>
         var glob = 4;//         
         function fun() {
             var height = 20;//    var        
             weight = 50;//     var        
         }
          fun();
          alert(weight);
	</script>
  </head>
  
  <body>
  </body>
</html>
 
jsには、ブロックの作用領域がありません.つまり、大かっこ{}で含まれています.javaにはあります.mainメソッドにコードを書き込みます.
public static void main(String... args) {
	for(int i=0;i<5;i++) {
          //todo
	}
     {
          int j=10;
     }
	int z = 20;
    System.out.println(i);// i   ,       ,      
	System.out.println(j);// j   ,       ,      
	System.out.println(z);// z  ,  20
}
 
jsの中なら
for(var i=0;i<5;i++) {
     //todo
}

var obj = {name:"Lily"};
for(var attr in obj) {

}

{
  var j=10;
}
alert(i);//  4,       
alert(attr); //  name,       
alert(j);//  10,       
 
これはまた、全体的な範囲でforサイクルを使用しながら変数を宣言することを避ける問題を示しています.そうでないと、グローバルな名前付き範囲の汚染を引き起こします.
 
もちろん、js 1.7にletキーワード宣言変数が提案されています.https://developer.mozilla.org/cn/New_in_JavaScript_1.7を選択します.
for(let i=0;i<5;i++) {
   //todo
}
alert(i);//     ,  i   
 
js 1.7は〈script type=「appliation/javascript;version=1.7」/をこのように参照する必要があります.
 
ps:firefox 2+js 1.7を実現しました.