老师这3个var result其实都不是同一个东西,但是因为每次执行后只能有一个return生效,所以接收变量明都写result才能反回上一层是吗?

老师这3个var result其实都不是同一个东西,但是因为每次执行后只能有一个return生效,所以接收变量明都写result才能反回上一层是吗?

老师这3个var result其实都不是同一个东西,但是因为每次执行后只能有一个return生效,所以接收变量明都写result才能反回上一层是吗?然后最后的一次返回是这里
图片描述

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

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

1回答
好帮手慕慕子 2023-01-19 16:21:28

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

1、三个var result 声明的确实是三个不同的变量, 但这三条语句分别是在if...else if...else中声明的,所以每次只会执行满足条件的里面的代码,也就是说每次调用方法,内部只会声明一个result,最后结合return将该result返回。

2、不太理解同学说的最后一次的返回这里具体指的是哪里,以视频中代码为例,老师简单梳理了代码的执行过程,可以结合如下解析理解:

由于obj1是对象,所以会执行如下语句:

https://img1.sycdn.imooc.com//climg/61fde6450901910c08320418.jpg

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

https://img1.sycdn.imooc.com//climg/61fde7050987da8c08740463.jpg

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

https://img1.sycdn.imooc.com//climg/61fde7ba09eaa7f208580533.jpg

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

https://img1.sycdn.imooc.com//climg/61fde88209f691df10720563.jpg


注意图二和图四中的result变量不是一个,二者只是名字一样,实际上并不是同一个变量。

deepClone(1)的结果得到后,图二中的result.a就有值了,即a就克隆完了,b同理。

由于obj1.c是数组,会执行if中的语句,此时会新建一个变量result,用来存放克隆后的33、44、 { m: 55,n: 66, p: [77, 88]  }:

https://img1.sycdn.imooc.com//climg/61fdea7e0901201409380603.jpg

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

https://img1.sycdn.imooc.com//climg/61fdeaac09764e5309300332.jpg









祝学习愉快~

  • 提问者 慕的地9440514 #1

    哦~,懂了忽略了执行时作用域了,每次只会触发一个resul,但是因为上下文的执行变量还是要写同样不然复用不了自调用

    2023-01-19 16:42:13
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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