递归深拷贝为什么不断赋值同一变量

递归深拷贝为什么不断赋值同一变量

递归返回以后数组和各种值都是怎么个原理添加到对象里的,不是很理解,老师能说说吗?麻烦讲仔细点,谢谢!

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

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

2回答
好帮手慕久久 2021-02-03 12:01:40

同学你好,是这个意思。obj1的属性值调用deepClone方法时,会得到一个result(将之称为resultA),resultA是该属性值克隆后的结果,resultA会被返回到obj1的result中,作为obj1的result的一个属性值。如果obj1的属性值还有嵌套的话,会一层层往下克隆,再一层层返回对应层级的result,然后最终得到的result再放到obj1的result中。

祝学习愉快!

好帮手慕久久 2021-02-03 10:43:57

同学你好,老师给你屡一下:

1、当对象obj1调用deepClone方法时,由于obj1是对象,所以会执行else if中的语句;在该语句中,会得到一个新的对象result,该对象就是obj1深克隆后的结果,然后再把新对象result返回;这样调用deepClone方法后,我们就能拿到obj1深克隆后的结果了(图一):

http://img1.sycdn.imooc.com//climg/601a06330906945f09270579.jpg

2、在else if中,要遍历对象obj1的每一个属性,对每一个属性都进行深克隆,然后把深克隆后的结果赋值给result,这样result才是obj1深克隆后的结果:

http://img1.sycdn.imooc.com//climg/601a07400999056608480312.jpg

当属性是a时,result.a=deepClone(obj1.a):

http://img1.sycdn.imooc.com//climg/601a090509c2725007600316.jpg

result.a的值,就是对“1”进行深克隆后的值:

http://img1.sycdn.imooc.com//climg/601a09630956de8703740165.jpg

由于“1”是基本类型,对1调用deepClone方法,会执行deepClone中的else语句,else中的变量result就是同用来接收“1”深克隆的结果的:

http://img1.sycdn.imooc.com//climg/601a09bc09afe2e506500538.jpg

http://img1.sycdn.imooc.com//climg/601a09dd09a5404006560282.jpg

即else中的result就是deepClone(1)的返回值:

http://img1.sycdn.imooc.com//climg/601a0c4d09a6decb06720448.jpg

这样就完成了对属性a的深克隆,并且将结果保存在了图一红框中的对象result中。其余属性同理。
3、deepClone方法的if elseif else语句中,都有一个变量result,该result是用来接收克隆后的值的。比如初始时是对obj1调用deepClone,那么在else if语句中,result就是obj1深克隆的结果。而obj1内的属性值也要进行一次深克隆,所以对属性值逐一调用deepClone方法时,此时的result就是对应属性值的结果。

此处不好理解,同学一次可能看不懂,不要急,多看几次,或者先往下学,然后每隔一段时间就回头看一下,慢慢就懂了。

祝学习愉快!

  • 提问者 帅得无心敲代码 #1
    老师你的意思就是说,这个result在接收值以后,就把上一层的result遮蔽了,然后在这层发现已经没有引用类型了,就把这层的result return到上一层,成为上一层嵌套的一个引用类型,就这样一直返回到最上面一层,直到把整个都返回出来。是这个意思吧?其实我就是这里不动,其他的递归传递什么的我都明白
    2021-02-03 11:03:54
  • 我之前也是不太明白意思,看完之后有点明白了,再去多刷几次视频,加深印象去​

    2021-04-18 23:53:35
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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