javascriptの変数、スコープ
4629 ワード
一、変数値をコピーする
JavaScriptには2つのタイプの値があります.基本タイプの値と参照タイプの値です.この2つのタイプの値のコピー結果は違っています.
基本タイプの値
参照の種類の値
二、パラメータ伝達
JavaScriptにおけるパラメータ伝達は値によって伝達されます.すなわち、伝達の過程で関数外の値をパラメータにコピーします.
したがって、以下のような結果が得られます.
基本タイプの値
参照の種類の値
三、スコープ
javaやcなどの言語が通じないので、JavaScriptはブロックレベルの機能領域がないです.ブロックレベルのスコープとは、{}抱え込む実行環境のことです.
例えば:
ブロックレベルがないスコープは、実行環境がないとは限らない.
以下のコードのように:
JavaScriptには2つのタイプの値があります.基本タイプの値と参照タイプの値です.この2つのタイプの値のコピー結果は違っています.
基本タイプの値
1 var num1 = 5;
2 var num2 = num1;
num 2の値は5に割り当てられ、num 1を削除しても影響がありません.参照の種類の値
1 var obj1 = new Object();
2 obj1.age = 5;
3 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);
カラーは関数内で宣言されていますので、関数が終了すると、関数の実行環境が破壊されています.カラーは同じように存在しないので、当然エラーが発生します.