読者です 読者をやめる 読者になる 読者になる

それわかるぅ〜

日々「それわかるぅ〜」と思ったこと、忘れたくないことを徒然なるままに。Inputした情報を定着させるためのOutputの場として使用しています。誤字脱字等はたぶん仕様です。

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が入るという話。