繁体   English   中英

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

[英]undersatnding javascript immutable variable and garbage collector

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

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

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

这取决于实现。 如果JS解释器不共享公共字符串,那么它可能会立即知道在为变量分配新字符串时可以释放原始字符串,并且可以立即执行操作,但不一定如此。

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

这是依赖于实现的,没有任何标准指定(也不需要这样做)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM