13

JavaScript の文字列は基本型なので、文字列を関数に渡すとそのローカル コピーが作成されますか? 文字列を作成した後に変更することはできないため、JavaScript VM が文字列のアドレスを関数に内部的に渡すだけではないというのは非論理的に思えます。

これについて心配する必要はないと言う人がいたら (これは Web 開発者と話しているときによくあることです)、私は HTML5 ゲームに取り組んでおり、ガベージ コレクションは大きな懸念事項であるため、本当に知っておく必要があります。

4

2 に答える 2

12

文字列は参照によって渡されます。

文字列は可変ではないため、変更しようとすると常に新しい文字列が取得されます (たとえば、 を実行value+="more")。

参照:不変とはどういう意味ですか?

@TJ Crowder: 値による vs refによる - 言語定義を見ているなら、あなたは正しいです。ただし、信じられないほど遅いため、実際に文字列のコピーを作成する実装はないと思います。また、文字列は不変のプリミティブであるため、変更できないためコピーする必要はありません。

于 2013-03-27T16:48:49.833 に答える
5

仕様はこの点について沈黙していると思います。ただし、文字列が理論的には「プリミティブ」であっても、メモリ内のコンテンツへの参照を渡すのではなく、文字列の実際のコンテンツを渡すのは本当にばかげた実装です。ほとんどの実装では、オブジェクト参照を処理するのと同じように「プリミティブ」文字列を処理していると思いますが (この点に関しては、 などの他のものでは明らかにそうではありません)、トラッピング===を使用していないだけです。Object

于 2013-03-27T16:53:47.260 に答える