首页 新闻 会员 周边

关于js 内存释放的疑惑

0
悬赏园豆:10 [已解决问题] 解决于 2018-08-03 17:11

1.

假设存在一个object

var a = {};

a.b = {a:1};

这个时候如果 

a = null;

那么b.a是否被释放了

理论上 a.b  因为a为null  应该会被释放 

那么 b.a 也会因为 a.b 被释放所以被释放。。

主要是没有办法确认  所以想问问大家的想法 或者是  验证一下

blurs的主页 blurs | 小虾三级 | 园豆:660
提问于:2018-08-02 17:35

我是真的很想搞懂这一方面 总觉得 这里虽然已经默认了 但是我找不到方法来验证这个问题 总觉得 这成了我一个知识盲区了 还是个天天能遇到的 浑身不自在

blurs 5年前
< >
分享
最佳答案
0

你a=null并不一定能释放a的对象..

更不用说后面 理论上 a.b  因为a为null  应该会被释放  这个完全是很奇怪的推论..哪有这个理论.

收获园豆:10
吴瑞祥 | 高人七级 |园豆:29449 | 2018-08-02 17:43

很感谢前辈提出的错误,我仔细思考了一下后觉得

可能是我的形容有点问题 或者 理解上出现了错误

我大概整理了一下思路 复述一下我个人的回收理解  大概如下

javascript的回收机制  当内存目标没有被使用 也就是指向为空的时候  都会被回收GC释放, (我的理解)
所以 我掐断了这个对象唯一的变量指针  然后  因为没有被引用了 无法从内存里找到这个被使用的对象空间  应该就会被下一次的游览器回收自动回收掉, 所以我判断 a=null之后  {b:{a:1}}这个对象就会因为没有变量可以找到他  所以  会被回收掉(也就是我理解的引用0会被回收的意思)

 

如若错误 还请更正, 也是对我的一种鞭策和助力,对学习是没有坏处的。感谢前辈的教诲。

blurs | 园豆:660 (小虾三级) | 2018-08-02 17:49

虽然依旧没有得到答案  但是  还是谢谢老师的解释了

 

blurs | 园豆:660 (小虾三级) | 2018-08-03 17:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册