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

我知道 javascript 中的字符串是不可变的。所以这里 var foo 指向一个值为 "text" 的内存块。在第二条语句之后 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 回答