小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

関数への引数の『値渡し』と『参照渡し』

関数へ引数を渡す時に、値を渡す『値渡し』と参照を渡す『参照渡し』があります。
VBは、関数側の引数の型指定で『値渡し』か『参照渡し』かが決まります。
C言語は、仕様的に『値渡し』のみで、『参照渡し』にしたいときは、ポインターを値渡しにします。
Perlは、仕様的に『参照渡し』のみで、『値渡し』風にするには、参照の中身をワークに移して処理します。
では、JavaScriptは、どうなっているのでしょうか?


JavaScriptは、変数の型によって『値渡し』か『参照渡し』かが決まります。
基本型(数値、論理値、文字列)は『値渡し』で、オブジェクト型は『参照渡し』になります。

// 文字列型の場合(基本型)
var xxx = "ABC";     // 値が代入される

if (xxx == "ABC") {  // 値で比較される
    alert(xxx);      // ABCと表示
    yyy(xxx);        // 値渡し
    alert(xxx);      // ABCと表示
}

function yyy (xxx) { // 値渡し
   xxx = "XYZ";
}

// オブジェクト型(配列)の場合
var aaa = ["ABC"];   // 参照が代入される
var ccc = aaa;

if (aaa == ccc) {    // 参照で比較される
    alert(aaa[0]);   // ABCと表示
    bbb(aaa);        // 参照渡し
    alert(aaa[0]);   // XYZと表示
}

function bbb (aaa) { // 参照渡し
   aaa[0] = "XYZ";
}