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