请问一下老师,关于视频中的循环引用案例

请问一下老师,关于视频中的循环引用案例

请问一下老师,视频中的循环引用案例,第一个 xm=null; 减少的是哪个 {} 的引用次数?为什么此时不是两个 {} 的引用次数都减一?这样在第二个 xh=null; 时再都减一,两个 {} 的引用http://img1.sycdn.imooc.com//climg/5d1dd2bc000107af03060254.jpg次数就都为 0 了?

正在回答

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

3回答

你好,对象是引用类型,变量在栈内存中,值在堆内存中,看下面图可能好理解一些:

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

xm和xn局部变量解除引用只是xm和xn不再指向堆内存中的值,但是在堆内存中还是在相互引用的。

自己再理解下。

  • Carol246 提问者 #1
    谢谢老师,我再想一下
    2019-07-09 00:23:29
好帮手慕星星 2019-07-05 09:42:54

你好,在练习中最后b=null,b本身没有引用,是b的arr属性进行引用了,所以将b置空之后,减少的次数是属性arr的引用。

而在视频中,xm以及xm中的wife属性都有引用,xm被置空之后,减少的只是xm的引用,属性wife的引用并没有减少。

自己再理解下,祝学习愉快!

  • 提问者 Carol246 #1
    老师,我还是有一些不明白呃……xm和xm的wife属性引用的是不同对象啊?xm引用的是第一个{},其wife属性引用的是第二个{},为什么两者没有同时解除引用呢?
    2019-07-05 10:50:31
好帮手慕星星 2019-07-04 18:54:11

你好,同学理解的可能有些问题,可以参考下面的解释:

xm和xn是fn函数中的局部变量,所以fn调用之后,xm和xn就解除了引用,也就是xm=null,和xn=null。

但是xm和xn对象中的wife和husband属性也引用了xh和xm,所以调用fn之后只解除了一次引用,并不能完全解除引用,这就是相互引用出现的问题。

自己再理解下,祝学习愉快!

  • 提问者 Carol246 #1
    但在 5-3 选择题中,var a=[4], b={}; b.arr=a; 当 b=null; 时,减少了一次 b 的 arr 属性所引用 [4] 的引用次数。 在视频案例中,xm=null 时,如果说解除的是 xm 对 {} 的引用。 那为什么没有解除 xm 的 wife 属性引用的 xh 呢?
    2019-07-04 19:10:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

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

在线咨询

领取优惠

免费试听

领取大纲

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