理解javascript不可变变量和垃圾收集器

时间:2013-10-15 04:04:53

标签: javascript garbage-collection

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

我知道javascript中的字符串是不可变的。所以这里var foo指向一个值为“text”的内存块。在第二个语句之后,foo指向具有值“另一个文本”的另一个内存块。

现在第一个值(“text”)会发生什么?它会存在于内存中,直到垃圾收集器通过吗?

2 个答案:

答案 0 :(得分:1)

由实施决定。如果JS解释器没有共享公共字符串,那么它可能立即知道当为变量分配一个新字符串时可以释放原始字符串,并且它可以立即行动,但肯定不需要。

如果它在多个变量之间共享公共字符串,那么它可能只等到垃圾收集器运行并意识到没有任何引用字符串块。

这是依赖于实现的,并未由任何标准指定(也不需要)。

答案 1 :(得分:0)

JavaScript中的字符串是什么?一组人物对吗?当你指定var x ='test'时;它分配一个包含字符数组的内存地址和一个空引用字符。它是垃圾收集器。现在你指定x ='另一个测试',它肯定会分配一个新的内存地址,但变量名是否相同?这意味着新字符串数组的初始指针引用x'第一个字符数组索引,当您调用x时,它返回新分配的值。