js内存泄漏的问题疑惑

var user = { name: 'tom', age: 20, gender: 'male' }
var test = document.getElementById('test');
test.onclick = function() {
    test.innerHTML = user.name;
}
user = null; // 释放对象

关于这个面试题有几点疑问,
1.这道题里面都谁存在内存泄漏的问题
2.这道题里面都谁在互相引用导致内存泄漏
3.还有就是onclick是异步执行,等到执行的时候里面引用user.name已经为null了,何谈被引用了?
菜鸟请懂得大神们讲解,详细一点谢谢了!!还有问一下大神们怎么在谷歌浏览器查看js堆区的变化
懂得大神们帮忙解答一下。不愿意解答的也请别乱踩。我是个菜鸟有很多不懂的地方也请你们谅解。

阅读 2.2k
4 个回答

释放对象不是应该放在点击事件里面嘛?

这不直接报错了吗为什么还是道内存题?

var user = null;
test.onclick = function() {
    test.innerHTML = user.name;// TypeError
}

这个没有得不到释放的资源吧!
onclick引用了user.name ,你没执行user = null时是可以根据引用去获取名称的也就是user.name但是你后来执行了user = null将对象引用置为null此时onclick函数引用的变量user=null所以在点击时代码肯定是会报错的。

清楚了这个过程我们就可以分析到底是那个对象得不到释放了,明显就是useronclick方法会一直引用它否则将会出错,所以不能手动释放,导致这个对象需要常驻内存,得不到释放。

再说互相引用问题,可能是我太菜了,确实没看到哪里有互相引用

再说第三个问题引用user.name已经为null了,何谈被引用了 ,变量的引用引用的是变量所指向的内存中的某一块区域,该区域负责存放数据。当你将user置为null之后其实是将user指向了null对象而已,为什么你会问出何谈被引用一说null在js中也是一个对象?

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