为什么 b= null 就能将b.arr 此处的引用清除呢?

为什么 b= null 就能将b.arr 此处的引用清除呢?

为什么 b= null 就能将b.arr 此处的引用清除呢? 答案为何为1呢?

而课堂上讲的例子中,xm=null 时, xm.wife 此处的引用却没法同时清除呢?

http://img1.sycdn.imooc.com//climg/5b8f93db0001bd5405790413.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
Miss路 2019-01-27 11:49:10

同学,你好,看一下下面的标注,什么时候计数会+1,什么时候会减去1:

var a = [4]; // 1次

var b = a; // 又指向了一次,+1,所以现在是2次

b = {}; // b的指向变了,需要-1,因此计数又变回了1

b.arr = a; // 又被指向了1次,+1 ,所以是2次

b = null; //b被清空了,需要-1,所以最后计数是1次。

这里面有三次引用,总共3次,但是还有一次是指向变了,就要3-1=2,最后b又被清空了,又需要-1,最后2-1=1次。

如果帮助到了你,欢迎采纳!

祝学习愉快!


好帮手慕星星 2018-09-05 17:20:26

下面是数组[4]被引用的过程以及被引用次数的变化:

var a = [4]; // 1次

var b = a; // 2次

b = {}; // b的指向变了,所以是1次

b.arr = a; // 又被指向了1次,所以是2次

b = null; //b被清空了,所以最后是1次。

而视频中,讲解的是循环引用的问题:

http://img1.sycdn.imooc.com//climg/5b8f9f9d0001608e09150437.jpg

老师在垃圾收集机制中有详细去讲这个引用次数,建议再好好看下视频。

祝学习愉快~~


  • 老师,b虽然被清除了,但是b.arr还是指向数组啊,加上a也指向数组,答案不应该是2次吗?请老师详细解释一下,谢谢。
    2019-01-26 15:40:27
  • 纯属个人理解,不当之处请各位指正: b.arr 是 b 的属性,存放在 b 指向的堆空间中。所以,当 b = null 后,b 指向的堆空间引用计数减少一次,引用计数值为 0, 这个堆空间会被当做垃圾回收,这个堆空间中的 b.arr 虽然指向了数组 a,但是被回收后,也就失效了。
    2019-05-18 10:03:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师