参照渡し

活字になってしまってるのでことさらに言及するわけだが(ネット上には同様のものがぶぁぁぁぁあってあるわけだが)
Software Design 2010/11 p129 より

オブジェクトは「参照渡し」に
 これらのオブジェクト型の変数は、C 言語でいうところのポインタに相当するため、関数の引数としてオブジェクト型の変数を指定した場合は、自動的に参照渡しとなってしまいます。関数の引数にはポインタの参照が渡されるので、関数の呼び出し先で引数のプロパティを書き換えると呼び出し元の変数の値も書き換わってしまいます(リスト 5 )

リスト 5 関数の引数でオブジェクト型はつねに参照渡しとなる

function object_by_reference(x) {
	return (x.i = 999); // プロパティを変更
}
var a = ({i : 123});
object_by_reference(x) // <= 999 が返る
a.i; // <= 999 に変わっている!

それは参照渡しではなく、"pass by sharing"(定訳はまだない?)と呼ばれているセマンティクスであって、というか「ポインタの参照が渡されるので」というのも微妙という気もするが、ともかく、「呼び出し元と呼び出し先でオブジェクトが共有されるもの」が「参照渡し」ではない
C 言語と同様(JavaPythonRuby もそうだが)JavaScript の引数は全て値渡しである
(もしかして、オブジェクトを複製して渡すことを「値渡し」と呼んでる言語がどこかにあるのか? あと検索してみると pass by sharing は pass by reference の別名と説明してるページもあったりして少々混乱するのだけど)
では本物の参照渡しとはどういうものかというと、C++ には参照渡しがあるので C++ のコードで説明するのだが

#include <cstdio>

class C0 {
public:
	int a;
};

static void
byref_sample(C0 &x)
{
	C0 *newObj = new C0();
	newObj->a = 2;
	x = *newObj;
}

int
main(void)
{
	C0 c0;
	c0.a = 1;
	printf("%d\n", c0.a);
	byref_sample(c0);
	printf("%d\n", c0.a);
	return 0;
}
$ g++ foo.cc
$ ./a.out
1
2

関数 byref_sample で、メンバをいじるのではなく、新しいオブジェクトを作って、それを仮引数に代入していること、そしてその結果が呼び出し元に反映していることがわかると思う。これが参照渡しである
(オブジェクトがリークしてるのはサンプルということで見逃してほしい)
「仮引数の変数が、あたかも実引数の変数そのものであるかのようなふるまいをする」のが、参照渡しである
余談。C++ の、呼び出し元では見た目に何の変化もなく参照渡しになってしまう言語デザインはちょっとよくないと思うのだけど、理由はあって、代入演算子(のオーバーライド)を自然なものにするためにはこうなってないといけないのである
(明示的な、関数呼び出しの形をしている関数呼び出しの場合と、演算子式による呼び出しで区別すればいいのか?)

追記

どうも追いかけてみたところ、JavaScript の古いドキュメントには "by reference" って文言があったようだ( id:tkng:20070807:1186500367 とか参照)。https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Functions の翻訳元はそのバージョンと思われる
現在のバージョン https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope を見ると

The parameters of a function call are the function's arguments. Arguments are passed to functions by value. If the function changes the value of an argument, this change is not reflected globally or in the calling function. However, object references are values, too, and they are special: if the function changes the referred object's properties, that change is visible outside the function, as shown in the following example:
(略)

"However, object references are values, too," ってはっきり書いてある

達人出版会初リリースおめ

IBM版は非常に出来が良かったらしいんだけど、IBMだったのが会社的にはデメリット。

http://tatsu-zine.com/books/1/pages/interview1

↑これにはえらいウケたのだけどなぜかは書けない

何でWindowsが使いやすいかというと、やっぱりレスポンスが早いからだろうなあ。 マシンをフルに使っている。いや、本当はIOは遅いはずなんだけど、でも、グラフィックの速度がぜんぜん違う。
Windowsって余分なこといっぱいしまくってるから、オーバーヘッドはものすごいんで、 Disk IO自身は遅いはず。ただ、グラフィックに関しては、グラフィックボードベンダーが バカみたいに最適化するのはどこのプラットフォームかって言ったらWindowsじゃん。やっぱ速いよ。
それが速いと、それこそEmacsのスクロール一つとったって早いじゃない。 だいたいXがばかみたいな構造(注3)で、レイヤーがいっぱいあるから遅くて当然で、 さらにグラフィックボードのドライバも最低限の機能しか提供していないから、 これで高速な動作なんて期待するのが無理だ。 OS Xマシンの方は所詮ノートパソコンしか買ってないから(笑) Macbook AirDELLワークステーションを比べるのはフェアじゃないけど。
注3: 語弊を招く言い方。論理的にはきれいな構造。

http://tatsu-zine.com/books/1/pages/interview1

昔 PC-286 の 10Mhz か 12MHz を使ってて、文章の編集には jed というこれまた非常に軽いエディタを使っていたので、DOS/V 機に乗り換えたものの DOS/V を除くどんな環境のテキスト編集もかったるいと思ったことがあった。一応 486 の 75MHz だったんですが。というかテキスト閲覧環境だけで言うならファイラと一体化した miel なんてのはもう最強なんじゃないかというか
ともかくまぁ「グラフィックボードベンダーが バカみたいに最適化するのはどこのプラットフォームかって言ったらWindowsじゃん。やっぱ速いよ。」ってのはバカにできなくて、坂村先生がいくら BTRON は筋がいいんですと主張したところで、この快適感にはかなわないんでないかなと思う
ていうか「(続く)」なのか