Javascriptの仕様で「オブジェクトは共有渡しで、プリミティブ値は値渡し」と区別しているのか


JavaScriptの参照に関する記事でよく、オブジェクトは共有渡しで、プリミティブ値は値渡しと書かれていますが、仕様書をみても当該の記述を見つけられません。  
仕様書を読む限り区別がない、つまり全てが値渡しの様に見えてしまいます。

もしくはReference型にbaseとして格納されているのは値を構成するデータ配列ではなく、値の存在そのもの、つまり参照（ポインタ）に近い概念であって、結局実は全部が共有渡しということなのでしょうか？

例えばProperty Accessorsの仕様で 「Return a value of type Reference whose base value
is bv」
というのは、作成されるReferenceのbaseにbvそのものを格納する→bvをデータとして複製して格納ではなく、その存在そのものを格納→実際は参照（ポインタ）に当たるものが格納されるイメージ、というニュアンスなのでしょうか？




まとめると、JSで値が何かの変数にセットされるような書き方がされているときは、
値がコピーされて箱に入れられるようなイメージではなく、新しい名前に値が結び付けられるイメージが良いということでしょうね。

しかし、やはり「値渡し」という言い方をすると、データとしてコピーされて新しいエリアに書かれるようなイメージがあります。Wikipediaの項目を見ても、そのようなイメージで書いてあると思います。  
実際に仕様の細部を実装側で補完して、参照の値渡しなどで実装することも出来そうですが、
あくまで仕様の範囲で語るのであれば、そもそもデータが渡っていくという考え方自体が良くないのかもしれないと思いました。

きっと値という存在に対する名付けの連鎖と捉えるのが一番素直なのかもしれません。  
そうすると、渡すのではなく、むしろ「名前貰い」と言った感じになるのでしょうかね。




引数の動作については、JavaScript が実装している ECMAScript の仕様書がある程度参考になるかと思います。
以下の様な箇所で触れられています。

  * <http://alpha.mixi.co.jp/entry/2012/10796/#ecma-263-3-8-introduction>
  * <http://dmitrysoshnikov.com/ecmascript/chapter-8-evaluation-strategy/>
  * <http://www.ecma-international.org/ecma-262/5.1/#sec-10.4.3>
  * <http://www.ecma-international.org/ecma-262/5.1/#sec-13.2.1>

ECMA263-3 の第八章内にある「ECMAScript での実装」にも書かれている通り、全ては共有渡し（Call by sharing）です。

質問で @JSer さんがおっしゃっているとおりの理解で間違いないかと思います。

