「JavaScript高級プログラム設計」ノート(3):パラメータの伝達

1993 ワード

更新します
9.17更新:
ECMAScriptのすべての関数のパラメータは値によって伝達されます.つまり、関数の外部を関数の内部にコピーしたパラメータは、一つの変数から別の変数に値をコピーするのと同じです.基本型の値の伝達は、基本型変数のコピーのように、サブ参照型の値の伝達は、参照型変数のコピーと同じである.アクセス変数には値と参照の2つの方法がありますが、パラメータは値だけで渡されます.
基本タイプの値をパラメータに渡すと、伝達された値は局所変数(すなわち命名パラメータ、またはECMAScriptの概念でいうと、argmentsオブジェクトの一つの要素)に与えられます.パラメータに参照タイプの値を渡すと、この値はメモリ内のアドレスをローカル変数にコピーしますので、この局所変数の変化は関数の外部に反映されます.
function addTen(num){

    num+ =10;

    return num;

}

var count = 20;

var result = addTen(count);

alert(count);    // 20

alert(result);    // 30
ここの関数addTen()にはパラメータnumがありますが、パラメータは実際に関数の局所変数です.この関数を呼び出したとき、変数countはパラメータが伝達される関数として、この変数の値を20とします.したがって、数値20は、addTen()で使用するためにパラメータnumにコピーされる.関数内部パラメータnumの値に10を加えたが、この変化は関数外のcount変数に影響しない.パラメータの値も30になり、関数北部の変更を反映します.もちろん、数値が基本値に等しいので、値によってパラメータを伝えるのは簡単です.オブジェクトを使うだけでは、問題はよく分かりません.
function(obj) {

    obj.name = "TheLegendofAJ"    

}



var person = new Object ();

setName(person);

alert(persn.name);  // "TheLegendofAJ"
以上のコードはオブジェクトを作成し、変数のpersonに保存し、このオブジェクトをsetName()に転送した後、objにコピーされます.この関数の内部では、obj個のpersonが同じオブジェクトを参照します.言い換えれば、このオブジェクトが値で伝達されていても、objは参照で同じオブジェクトにアクセスします.したがって、関数の北部がobjであるときに、nameのローカルオブジェクトが追加される.