javascriptブロックレベルのスコープ

5131 ワード

c/javaでは、ブロックレベルのスコープの概念を持ち、大括弧内はブロックレベルのスコープであり、ブロックレベルのスコープ内で宣言される変数であり、ブロック以外は見られない。
C音声のブロックレベルのスコープの例は以下の通りである。
int one = 1,two = 2;



if(one < two){



    int temp = 0;



    temp = one;



    one = two;



    two = temp;



}



printf('big=%d,small=%d',one,two);  //big=2,small=1



printf('temp=%d',temp); //  
 
 
Javascriptコードは以下の通りです。
 1 var one = 1,two = 2;

 2 

 3 if(one < two){

 4 

 5     var temp = 0;

 6 

 7     temp = one;

 8 

 9     one = two;

10 

11     two = temp;

12 

13 }

14 

15 console.info("big="+one+",small="+two); //big=2,small=1

16 

17 console.info(temp); //1
 
大括弧内で宣言されている変数が大括弧以外でもアクセスできます。これはjavascript変数の不思議なところの一つです。javascriptはブロックレベルの作用領域がないからです。
このように一つの問題が発生します。複数の人がプログラムを編集する場合、一人一人が自分の習慣によって、臨時変数をvarと命名します。 temp、変数が呼び出された後にメモリを釈放していないで、他の人の編纂のプログラムを汚染することができますか?可能性があります。どうやって根絶しますか?私たちは、関数内で宣言されている変数が局所変数であり、外部にアクセスできないことを知っています。匿名関数を宣言して、論理プロセスをカプセル化して結果だけを返してもいいですか?いいです
以上のjavascriptプログラムに対して以下のように修正します。
 1 var one = 1,two = 2;

 2 

 3 (function(a,b){

 4 

 5     var temp = 0;

 6 

 7     if(a < b){

 8 

 9         var temp = 0;

10 

11         temp = a;

12 

13         a = two;

14 

15         b = temp;

16 

17     }

18 

19     console.info("big="+a+",small="+b);

20 

21 })(one,two); //big=2,small=1

22 

23 console.info(temp); //ReferenceError: temp is not defined
 
 
関数が実行した結果は,我々の要求に達し,また宣言の中間変数は局所変数になり,このように局所変数は他のプログラムを汚染しない。