老师这3个var result其实都不是同一个东西,但是因为每次执行后只能有一个return生效,所以接收变量明都写result才能反回上一层是吗?
老师这3个var result其实都不是同一个东西,但是因为每次执行后只能有一个return生效,所以接收变量明都写result才能反回上一层是吗?然后最后的一次返回是这里
正在回答 回答被采纳积分+1
同学你好,问题解答如下:
1、三个var result 声明的确实是三个不同的变量, 但这三条语句分别是在if...else if...else中声明的,所以每次只会执行满足条件的里面的代码,也就是说每次调用方法,内部只会声明一个result,最后结合return将该result返回。
2、不太理解同学说的最后一次的返回这里具体指的是哪里,以视频中代码为例,老师简单梳理了代码的执行过程,可以结合如下解析理解:
由于obj1是对象,所以会执行如下语句:

在该语句中,会依次深克隆obj1的属性a、b、c(图二):

当克隆属性a时,还会执行deepClone方法,并把1传入(图三),此时会从上往下执行deepClone中的代码:

即会判断是否是数组、对象,b、c属性同理。由于1是基本类型,所以deepClone(1)结果是1(图四):

注意图二和图四中的result变量不是一个,二者只是名字一样,实际上并不是同一个变量。
deepClone(1)的结果得到后,图二中的result.a就有值了,即a就克隆完了,b同理。
由于obj1.c是数组,会执行if中的语句,此时会新建一个变量result,用来存放克隆后的33、44、 { m: 55,n: 66, p: [77, 88] }:

克隆后的结果,会push到result中:

祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星