JavaScriptのObjectはcall by referenceではないと主張したい
Mozilla Developer CenterのCore JavaScript 1.5 Reference:Functionsには「Non-object parameters (中略) are passed to functions by value;Object parameters (中略) are passed to functions by reference;」って書いてあるんだけど、これ、じっくりと読んでみてもNon-objectはcall by value, Objectはcall by referenceであるとしか読めない。しかし、以下のコードの結果からすると、実際にはObjectを引数として渡す場合には参照で値呼びをしていると考えるべきだろう。
function func(arg) { arg = new Object; arg.prop = "world"; } var a = new Object; a.prop = "hello"; func(a); print(a.prop); // helloと出力される
ECMAScriptの仕様書とかも読んでみた方がいいのかな。でももう今日は眠いので寝る。
そもそも、call by valueとcall by referenceはよく対比されるけど、call by referenceな言語って今まで見たことがない…と思ったら、Fortranはcall by referenceなのか…。