深克隆函数的再次思考后的一点想法和疑惑

深克隆函数的再次思考后的一点想法和疑惑

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

问题描述:

我觉得这里要先进入for循环,然后在循环里面判断每个循环出来的值尽行比较,逐步把值推入变量result中去,在这里特别理解不了最后面那个o,这里的o不是代表一个对象obj1吗?怎么就变成了一个基本类型值呢?

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

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

4回答
帅得无心敲代码 2021-02-04 22:41:15

你可以理解为盗梦空间,盗梦空间最上面一层是整个对象obj1,但是整个对象obj1里面还有第二层梦境,这里的第二层梦境也就是整个obj1对象里面还有一个对象或者是数组。

举例:var obj1 = { 第一层梦境, 第一层梦境的东西1, { 第二层梦境 }  ,第一层梦境的东西2   }。

那么要进入第二层梦境,是不是要先进行判断呀?判断这个是一个梦境还就只是第一层梦境里面的一个东西。

这个时候我们就要把整个第一层梦境里面的东西全部都检查一遍,因为电脑只有靠类型来判断是不是梦境。所以我们得使用for循环来把第一层的东西全部检查一遍。

我们在刚开始的时候就默认的第一层是梦境也就是对象,http://img1.sycdn.imooc.com//climg/601c048c09e77b5803430136.jpg那么我们就直接把等一层梦境全部都丢进参数o里面,for循环就会把第一层梦境里面的东西全部拆开成一个一个的,由于电脑是只有一个一个的检查,所以我们就得把第一层梦境里的所有东西一个一个的传入到deepClone()这个检查机里面,如果在检查机里面发现还有一层梦境,就会继续进那一层梦境继续一个一个的传入检查,要是检查到只是那层梦境的一个东西而不是梦境http://img1.sycdn.imooc.com//climg/601c059d090d8ca402010093.jpg就通过检查机的出口把东西传出检查机。

当一层梦境全都检查结束了就直接克隆,从最里的那层梦境开始克隆,一直克隆到最外面一层,然后再把整个梦境输出出来。就完成了整个的拷贝,这是我的理解,希望能帮助同学

及瓯都市 2021-01-05 22:00:38

程序是从上到下执行的,对象里面的数组、对象都归位了,剩下的只能是基本类型值

好帮手慕星星 2021-01-03 19:18:51

同学你好,result并不是一个数组。判断是数组的时候赋值为数组,判断为对象的时候赋值为对象,判断为基本值的时候直接赋值就好了

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

基本变量值直接赋值即可克隆,不需要再调用一次函数了。

祝学习愉快!

好帮手慕星星 2021-01-03 11:17:49

同学你好,问题解答如下:

1、课程中考虑多种情况,所以先判断是哪种类型,然后再进行遍历操作。数组和对象遍历操作不一样,所以分开了。

2、可以考虑基本类型值,避免传递参数不是引用类型的情况,添加上严谨一些。

祝学习愉快!

  • 提问者 慕田峪6263377 #1

    这样说还是不理解,就算是浅克隆也要遍历一次push到result里去,怎么就直接把“0”赋值呢?“o”不是一个要克隆的源对象吗?

    2021-01-03 16:55:12
  • ToExpress 回复 提问者 慕田峪6263377 #2
    基本类型进行变量传值的时候,内存中产生新的副本
    2021-01-31 16:24:00
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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