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

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

阅读 10.3k
3 个回答

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...

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题