把一个有值的对象赋值为空,那原本对象的值,还存在吗?

发布于 2022-09-05 10:19:57 字数 152 浏览 20 评论 0

对于一些公共常用字符,我好理解。
但是,对于一些比较复杂的对象有点迷糊了。
比如:var tempObj = xxxxxx (这是复杂的对象,假设占很大内存),此时我把tempObj = null;赋值为空,那么这个复杂的对象还存在吗?这个tempObj原本占有的内存会释放吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雨的味道风的声音 2022-09-12 10:19:57

obj = null,代表指向一块内存的引用被干掉了,但是内存在第一时间可能并没有被立即释放掉,浏览器gc是有一定时机的,并不一定立刻就释放内存。

引用MDN的一段示例代码

var o = { 
  a: {
    b:2
  }
}; 
// 两个对象被创建,一个作为另一个的属性被引用,另一个被分配给变量o
// 很显然,没有一个可以被垃圾收集


var o2 = o; // o2变量是第二个对“这个对象”的引用

o = 1;      // 现在,“这个对象”的原始引用o被o2替换了

var oa = o2.a; // 引用“这个对象”的a属性
// 现在,“这个对象”有两个引用了,一个是o2,一个是oa

o2 = "yo"; // 最初的对象现在已经是零引用了
           // 他可以被垃圾回收了
           // 然而它的属性a的对象还在被oa引用,所以还不能回收

oa = null; // a属性的那个对象现在也是零引用了
           // 它可以被垃圾回收了

具体可以看看这篇文章
https://developer.mozilla.org...

笑忘罢 2022-09-12 10:19:57

在tempObj = null时,对象依然存在于内存,但是会在下一次进行垃圾回收时被释放掉

嘿嘿嘿 2022-09-12 10:19:57

js中一切皆为对象,所以说常用字符和复杂的json是一样的。
如果tempobj=null;之前有别的复制引用( var b = tempObj)则js的垃圾回收机制不会对其进行回收。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文