なんとなく生きてます

雑記帳備忘録チラシの裏

JavaScriptのfor〜in文は値渡しである

タイトル通りJavaScriptのfor in文の値渡しについて、注意点をメモ。

var a = 1;
var b = 2;
var c = 3;

var arr = [a, b, c];

var  func1 = function(inputArr){
  for(var n in inputArr){
      n = 999;
  }
};

func1(arr);

console.log(arr); //出力は[1, 2, 3]

for in 文の n は値渡しである。

ちなみに、

var a = 1;
var b = 2;
var c = 3;

var arr = [a, b, c];

var  func1 = function(inputArr){
  for(var i = 0; i < inputArr.length; i++ ){
      inputArr[i] = 999;
  }
};

func1(arr);

console.log(arr); //出力は[999, 999, 999]
console.log(a); //出力は1のまま

である。 まあでもCやったことあれば、そもそも参照渡しってのはJavaScriptのオブジェクト型がただ単にメモリアドレスとしてやり取りされるってのを考えればそれで済むのかなと。C風に考えるのであれば後者のパターンはinputArrってのがベースアドレスでiがオフセットであるからその指定されたメモリアドレスの場所に999が入るという話。