0
var foo="text";
foo="another text";
console.log(foo); //=>"another text"

JavaScript の文字列が不変であることは知っています。したがって、ここで var foo は、値が "text" のメモリ ブロックを指します。2 番目のステートメントの後、foo は値「別のテキスト」を持つ別のメモリ ブロックをポイントします。

最初の value("text") はどうなりますか? ガベージコレクタが通過するまでメモリに存在しますか?

4

2 に答える 2

1

実装次第です。JS インタープリターが共通の文字列を共有していない場合、変数に新しい文字列が割り当てられたときに元の文字列を解放できることがすぐにわかり、すぐに動作する可能性がありますが、そうする必要はありません。

複数の変数間で共通の文字列を共有している場合は、ガベージ コレクターが実行され、文字列ブロックへの参照が何もないことに気付くまで待つだけです。

これは実装に依存し、どの標準でも指定されていません (指定する必要もありません)。

于 2013-10-15T04:38:29.073 に答える
0

JavaScript の文字列とは? 文字の配列ですよね?var x = 'test'; を割り当てると、文字の配列と最後にヌル参照文字を含むメモリアドレスを割り当てます。ガベージコレクター用です。x = 'another test' を割り当てると、間違いなく新しいメモリ アドレスが割り当てられますが、変数名は同じですよね?つまり、新しい文字列文字配列の初期ポインターは x' の最初の文字配列インデックスを参照し、x を呼び出すと、新しく割り当てられた値が返されます。

于 2013-10-15T06:11:53.263 に答える