javascriptの変数、スコープ

4629 ワード

一、変数値をコピーする
JavaScriptには2つのタイプの値があります.基本タイプの値と参照タイプの値です.この2つのタイプの値のコピー結果は違っています.
基本タイプの値
1 var num1 = 5;

2 var num2 = num1;
 num 2の値は5に割り当てられ、num 1を削除しても影響がありません.
参照の種類の値
1 var obj1 = new Object();

2 obj1.age = 53 var obj2 = obj1;
 obj 2.ageは同じ5ですが、obj 1とobj 2は同じ対象を指しています.Obj 1の値を変更すると、obj 2の値も変わります.
 
二、パラメータ伝達
JavaScriptにおけるパラメータ伝達は値によって伝達されます.すなわち、伝達の過程で関数外の値をパラメータにコピーします.
したがって、以下のような結果が得られます.
基本タイプの値
1 var num1 = 5;

2 function setValue(obj){

3     return obj += 10;

4 }

5 var num2 = setValue(num1);

6 alert(num1);//5

7 alert(num2);//15
 これはコピーのプロセスですので、基本タイプのコピーは元の値に影響を与えません.関数内でパラメータを計算します.num 1の値は変わりません.
参照の種類の値
1 function setAge(obj){

2       obj.age = 15;

3 }

4 var john = new Object();

5 setAge(john );

6 alert(john.age);//15
 同じように、タイプ値のコピーを適用することで、関数内でパラメータを再コピーすると、関数外の元の値にも影響が出ます.
三、スコープ
javaやcなどの言語が通じないので、JavaScriptはブロックレベルの機能領域がないです.ブロックレベルのスコープとは、{}抱え込む実行環境のことです.
例えば:
1 (function(){

2     var i = 5;

3     if(i == 5){

4         var color = "blue";

5     }

6     alert(color);

7 })();
 同様なコードの下で、javaの中で最終的に誤ったと報告して、if条件が実行し終わった後に、カラーはすでに破壊されました.しかし、JavaScriptは正常に実行できます.
ブロックレベルがないスコープは、実行環境がないとは限らない.
以下のコードのように:
1 (function(){

2     var i = 5;

3     if(i == 5){

4        var color = "blue";

5     }

6 })();

7 alert(color);
 カラーは関数内で宣言されていますので、関数が終了すると、関数の実行環境が破壊されています.カラーは同じように存在しないので、当然エラーが発生します.