参照渡し

JavaScriptの module.exports と exports の挙動を説明する言葉を探していたら:

↑概念と用語法としては正しい指摘だと思うが、「参照渡し」はすでに「アドレス渡し」の意味で通用してしまっているから、実際のところ言ってもしょうがない話だと思う。

引数変数の名前が、何を表し/どのように取り扱われるかという話で、このテの議論を理解するにはけっこうな予備知識が必要。

  1. アドレス値
  2. 場所〈ロケーション〉
  3. メモリセル、メモリブロック〈メモリオブジェクト〉
  4. 関数フレーム
  5. 関数フレームの引数領域

こういう知識の価値は相対的に減少しているし、こういうこと知ってる層は高齢化している。時代に迎合するつもりはないが、実質的にあんまり要らない知識だと思う。

が、引数そのものになんか代入したときの挙動は確かに重要ではある。

  1. 値そものが変わるだけ。
  2. ポインターが変わって別な所を指すようになる。
  3. ポインターの指している先に代入される。

JavaScriptのCommonJSの話だと、関数に入った時点では exports が module.export を同じ場所を指しているけど、exports が引数変数そのもので、module.export は引数変数のプロパティであるところが話をややこしくしている。名前への代入で何が起きるかに注意する必要がある事例になっている。