00:02
现在呢?好了吗?好了,咱继续来。嗯。然后再来看啊。那么咱们刚才把这个箭头函数已经在做了这个缩减,已经改出了这个箭头函数格式这个样子对吧?然后我们来看他说了箭头函数是允许使用简短的语法来编写函数表达式的,然后不需要方式,不需要这个return和方括号,我们都可以都给它,已经给它干嘛省略了,然后他说使用cost比使用瓦更安全。啊,使用count比使用Y更安全,那么因为函数表达式始终是什么?常量值,所以在对于函数,从今天开始往后所有函数的命名不要再去使用什么like。之前我一直没有用过哇,自从我们学了let以后,我是不是一直用的let呀,对吧?那么从今天开始往后所有只要是函数的名字都要用什么?用count,因为函数表达式它始终是什么,是常量值啊,它是整个函数体记还记不记得我给大家讲那个内存的时候,我们内存里边会分为四段,对吧,分别是什么?这个堆空间,占空间,还有这个代码段,还有静态代码段,是不是这四块,然后咱们说了变量里边所对应的值存到了哪啊,存到了占空间里边对吧?而常量对象,数组函数这些内容存到了哪呢?存到了堆里边。
01:32
啊,它是存到了堆里边,所以说它始终是都是属于什么,属于常量值,所以大家就记住就这些东西啊,咱们说了学高级语言的目的就是为了脱离底层的关系,对吧,底层的内存内存关系你可以什么都不知道,这没事啊,但是你给我即使一句话是什么呢?就是你所有跟函数相关的命名必须使用cost就可以了,当然你使用light有没有问题,没有问题,你像刚才我在演示的时候,我是不是也一直使用的呢?对吧,那么从现在开始就不要再去使用什么,不要再去使用好吧。
02:03
来,那么咱们看到了这第一种的箭头函数,那么当然了,箭头函数我们再去改良。它还能写出什么样的格式来来,我先写个正常的吧,啊,叫做箭头函数啊,那在这里边,呃,不用我直接是什么cost,是不是我们一旦定义好了之后将不能更改呀,对不对?哎,那cost比如说这里边我们来一个de me常量名,是不是我们推荐使用什么使用大写对吧,然后在这里边一样,你看它有这个。我现在只省略什么省略方啊,叫做省略FUC方啊,那就是不用方省之后直什么直接是参数对吧?这小括号括的是不是行参,行参之后对应着是不是就是我的方法体啊,函数体不能个方法体对吧?哎,那函数题里边你就可以对应的去写内容了,比如说我就。
03:03
写一个I return,一个A加B,好了A加B,那OK,这是不是就定义好了一个箭头函数,那么这个时候我是省略了谁,是不是只是省略了function?能看懂吧,哎,那么一样,我在调用的时候呢,咱们先来看啊,其实你不用调用,我先把这个DEMO1打印出来,你看它是什么形式的。是这个是,你看是不是我的函数。看到了吗?哎,就是我箭头函数的格式,因为它本身也是函数类型嘛,你看一下类型type of。什么类型,是不是方式,哎,所以依然是我的函数类型啊,那么好了,那接下来就是我们的这个。调用啊,那调用的话就是DEMO1括号往里面去传内容,比如传十二十,那么一打印没有结果,因为它是什么的吧,所以我这里边返回。给个log来输出,结果是到30都没问题对吧?那再来还可以干嘛呢?
04:01
那你比如说如果说啊,你看刚才这里边我一直都是给的这些这些小括号,但是这里边我是不是一直都有两个参数啊,对吧,那么如果我只有一个参数的情况下,我还能省略掉这个小括号。啊,咱们来看在这里边,如果只有一个参数对吧,可以省略。这个括号啊,比如说在这里面同样cost的DEMO de DEMO等于什么呢?等于一个A。这就一个参数啊哎,然后指向指向的一个方法体有函数体分一个什么呢?比如说我求A星星二啥意思。哎,是不是求他二次方了对吧,那么在这里边同样来log logg打印DEMO。二求谁的二次方呢?我求三吧,诶求三当然了啊,你调用的时候我是不是该加括号还要加呀,对吧?只是在定义的时候,如果我就一个参数,我是可以省略到这个括号的,那么现在你看三三得九没有错吧,哎,那OK,这是什么?只有一个参数的,我是可以干嘛可以这个省略这个小括号了,而且呢,如果说只有这里边只我只需要一个语句的情况下啊,那么我还可以干嘛呢?省略掉这个re return,刚才其实在这里边我在最开始我们推推荐的函数时候,我已经省略掉了,对吧?那也就是说在这里边你看啊,同样。
05:36
啊,叫做什么呢?省略re return啊,其实省略它默认的情况下就是return语句对吧?所以在这里边我就直接cost DEMO de demo3,啊等于什么呢?等于这个A。指向了,这回我直接是不写return语句了,那不写return语句的话,我连换换号就都已经省了,对吧,直接是A星星二对吧,省略瑞及。
06:07
以及发括号对吧,那咱一步一步来吧,先买那个人吞省略了那人省略了这块是不是得加上方括号啊。来加上括括号好了,那么这个时候当我加上花括号以后,你其其实他这块是有这个叫什么代码过去。这个叫什么波浪线,给我提示了一个注意的对吧,那么咱们先来看结果可不可以啊,叫做DEMO。三括号,然后你看他会不会给我算,然后这会我求几呢?求五吧。五的话是多少啊。25吧,好了,告诉什么呢?安的有返回吗?没有看到了吗?我加了花个号在这里边,他没有,没有的话,好,这里边来咱们再来看啊,我在这里面打印的log。这能看懂不这么样的能看懂吧,哎,因为你既然是函数嘛,你可以肯定是有多行嘛,对吧,但是我加了花括号以后,它默认是return的作用吗。
07:10
不是吧,对不对,哎,所以这里边省略瑞困是不能什么呀,不能带有花括号的,这能理解了吧?哎,省略人不能带有画括号,所以这里边最终它的改版应该是什么样的,那应该是这个cost cost。然后Du mo4。等于A指向箭头,那这个在A乘上二啊,这才叫做什么,当你不写这个花括号才代表了这块是个铝寸啊,就是把这个结果返回给被调用的地方,那么这个时候你再来看,我来烙一个这个DEMO。四我给他一个五的时候,你看这个时候是不是才拿到我的。
08:03
五来这个时候是不是才是25看到了吧?哎,所以说这块要记住啊,省略水不能带有什么,不能带有划括号啊,才是返回,才是返回好了,那再来这是我们一直都在说一个参数,对吧,然后再加上省略,那么我能不能说没有参数,如果说如果函数没有参数的时候呢。Co的一个DEMO5等于,等于什么呢?等于没有参数,那没有参数的话,我是不是可以直接写上,比如说我写个二乘二可以不?可以吗?不可以对吧,你看好了,如果我直接这么写,在这一块,两个等号之间是标的红色的了,对不对?哎,如果你没有参数,那不行,你必须干嘛给个小括号来占位。明白了吧,哎,那好了,你一个参数的时候可以省略掉小括号对吧?哎,两个参数的时候,你加上小括号,正常往上写,这都没问题对吧?但你没有参数的时候,大家切记小括号一定要写上对吧?得留着占位,那么这个时候我再去。
09:13
Log打印DEMO。五的时候。然后括号。没有参数咱就不管了,我直接来,你看是不是输出这个事了。看到了吧?哎,这就是咱们箭头函数的这么几种变形,好记吗?相信相对来说用起来是不是就更简单了,你比如说像呃,我们之前是不是做过这么一个,嗯。叫做求平方的函数对吧?FUC方程平方括号在这里边,你需要干嘛?给我一个数对吧?给了我数以后,咱们求的平方是不是就是直接吞了一个什么吞了一个。他。乘二不对。平方二是这样的吧,对吧?哎,那这个时候我是return的对吧,这个时候我来落个平方,比如这里边我一下给个四,那他告诉我16是不是求平方函数搞定了,然后我们还定义过什么求平方和了吧。
10:11
求平方和,那求平方和的话,我是不是借助了于回调函数了,对吧,叫平方和是不是这么写的?哎,借助于回调函数你需要干嘛?给我一个函数的名对吧?给我两个。一二是不是给我两个值,然后在这里边什么我是不是就是re returnu,括号UM1是不是这样的,然后加上fun一再括号二是不是这么去写的,对吧?哎,写完以后,那么它再去调用的时候,是不是就是我在这里边落个屏。方盒。然后呢?平方和先去传一个平方对吧,然后再去传什么,再去传两个数,比如说三。
11:08
五那么最终他给我结果多少?34对吗?三三得九五五二十五对吧,34没错啊,那好了,那像这种方式求平方和的,我能不能用这个箭头函数给它改良的,就是说我不定义这个东西了,对吧?我直接上一个箭头函数可不可以。来,那在这里边是不是就直接平方和,然后在这块呢,我们要给他去写什么,写它的这个。嗯。X。指向。X乘乘二吧,这是一个。对吧,然后我要传数,这个X值是不是要传数啊,传一个三传一个五,这能看懂不。能看懂吗?
12:01
是不是有点难理解了,这么写我们先看一下结果吧,好不好?来我们先落个这个结果,我们看一下最终答案是不是也,34在第多少行,第51行,51行是不是我这里。没问题了吧,没问题我们再来分析吧,那你看刚才我们这么写这种函数,大家都看懂了吗?这都看懂了吗?林哥。这块看懂了吧,看懂了是吧,这块懂吗?这块就不懂了吧,是吧,但确定这块看懂了是吧。确定这块看懂了,那好,那既然这块看懂了,这块没看懂,我们就来看一下这块啊在这里边咱们刚讲完,见到函数怎么用呢?是不是cost,我们去定义一个什么,定义一个变量,比如说DEMO6等于什么呢?等于X乘乘二。是不是这样的,哎哟,不对,等于什么呢?等于X,然后箭头,然后X乘乘二,是不是我有一个参数叫X,然后我求RRX的平方呢,对吗?那这个时候当我调用这个DEMO6的时候,De Mo demo6的时候,我在这里边传一个五,那么好了,这个五是不是十参,这个X是不是行参,五是不是会赋值给这X。
13:12
对吧,然后X拿到这个函数体里边是不是就是呃,五星星二,是不是就求五的平方呢?这能明白吗?那好了,那这块要明白了,你看这块是不是也是这样的,你看我注意我调用这个函数对吗?调用这个函数是不是调用平方和的函数,然后我把X指向X星星二这个参数,注意到这为止,是不是一个参数,这个参数赋值给了谁?是不是赋值给了这个变量。对吗?将这个参数复制给变量,你看是不是就将这个X这段内容赋值给了DEMO是一样的道理。对吧,因为它是参数嘛,这个十参,这个行参,这个十参会赋值给谁啊,给这个变量,那给这个变量到这里边来用的时候,是不是就是相当于什么,相当于是它一调用这个东西,一调用的时候是不是就执了哪个代码,是不是就是执行的X指向着X星星二了。
14:07
对吗?然后你需要把X传进来,X谁,X是不是一我传进来了A1我传的是几,这里边运算的是不是就是几啊。能理解吗?刘哥这回能看懂了吗?能了,确定了啊,那OK,那最终算完以后,结果34是不是也出来了,对吧,那么同样。再来看,那我这个平方和我能不能不这么写了,我能不能把它也改成这个叫什么渐动函数啊。那怎么改啊?把它也改成箭头函数看好了,就是说我这个也不要了,我也要一个箭头函数啊,那在这里边是不是就是Co,比如说平呃平方和。变了就用大写,我直接用大写,这没问题吧。但是我的抗有点过分了吧,CST啊,平方和它应该等于什么?是不是等于括号有参数对吧?有几个参数,三个参数FUN1,然后1NU2是不是三个参数,然后箭头指向,然后在这里边是不是直接返回啊,那I return return什么瑞return func1括号然后。
15:18
这个叫什么来着,U1对吧,然后加上fun c1括号NU2,是不是改成了箭头函数了。对吧,那改完之后调用呢,调用的时候是不是就是平方和括号,然后在这里面同样我还是一样给他什么,给他箭头X指向的X星星二。对吧,这是一个,然后我来传什么呢?传一个这个传一个五传一个。四好,算一点啊。Log打印结果来答案41对吧?五五二十五四四十六是不是41,那这回箭头函数明白了吗。
16:04
明白了吗?这个键的函数各位一定要多练多用,多练多用。啊,一定要多练多用。啊,箭头函数首先是ES6里边提供的啊,到以后后期的框架VE呀,Re呀,对吧,里边你都会常见啊,所以说现在你要是不常用它,等到你刚接触框架那段时间,你就会很懵,很难,你就觉得里边很乱写的东西你都没见过。明白吧,所以你把它多练习就会好一点,好吧。好了啊,那这是咱们这个叫做箭头函数,那箭头函数完事以后,我们再去来看一个。那是在对象里面。
17:01
不在这里。不在这里。对象。嗯,你的问题以后单独问我,你的问题我给你讲完他们全蒙,明白吧,因为你们的水平不在一个层次上啊,他们还没达到你那个阶段,好吧。来在这里边继续零五,嗯,箭头函数完事了,我们在这里边再看的是不是。只剩最后一个了,B包函数对吗?那么在讲B包之前,我给大家再稍微扩展一个东西,但这个东西作为了解就可以了啊,了解就可以了,因为谁到这儿都懵,而且这个东西以后你们还用不上,这叫什么呢?叫做递归函数。嗯,来,SCRFT,实块标签f func function DEMO好了,我用,我先用最原始的格式,咱不用箭头函数了,因为箭头函数刚写完啊,我怕给归蒙了啊,咱用最原始的方式去写,那么在这里边我传一个传一个变量吧,传一个N,传一个N之后呢,我想想我要怎么去写啊,嗯,如果如果N。
18:08
大于。零,我就调用N减一啊,错了,对N减一,否则else,否则否则我在document点。Right。输出一个HRHR好了,然后进来以后我先document点二。TE。输出一个N。输出一个N,然后再来document.wi再来一个好了。这就写了一个函数,能看懂不?最难最恶心的就说白了,地位函数就是自己玩自己,我就是在自己里面。
19:00
调用的是自己对吧,调用了别人,我们管它叫什么回调对吧,调用自己我们它叫什么叫递归啊,就是自己玩自己,那现在我们看它到底是怎么玩的,自己往里面传个小点数,传一个三好了,我们来保存,保存完以后在这里边来执行。告什么3210横线0123。好了,对了,这个代码捋一下,看看你能不能捋得清。这个题就是一个故事,什么故事呢?咱们小时候应该都听过一个故事啊,叫什么呢?叫做那个叫从前,哎,从前有座山。有座山,然后呢,山里有座庙,庙里和尚,哎,对了,庙里有个老和尚跟小和尚讲。
20:04
故事讲的是什么?哎,讲的依然是从前有个山,山六个庙,对吗?那么也就相当于是第一个,你要把它拆分出不同的人物来啊,你比如说啊,比如说我现在对应的这个老六,这一排下去,我们统称老和尚。都叫老和尚没问题吧,国王这一排这一溜,从下一个都叫小和尚,那比如说现在啊,以我开始,我对国王,那从前有个山山里庙,是我这个老和尚给他这个小和尚讲的,讲故事对吧?讲的是什么呢?讲的是从前有个山山里庙,这个老和尚给这个小和尚讲故事,明白什么意思吧,他是有不同的人,直到他讲了几遍,就是相当于遇到了几个角色以后。遇到了,相当于讲了三层了是吧?你看从前有个山,山里有个庙,庙里有个老和尚给小和尚讲故事,然后讲的是什么呢?讲的是从前有个山,山里庙,庙里有老和尚给小和尚讲故事,然后讲的是什么呢?讲的是从前有个山,三里庙,庙里有个老和尚给和尚讲,讲的什么呢?讲的是这个童话。
21:12
童话故事里面告诉我们对吧,白雪公主,白雪公主。公主跟谁跟这个这个这个王子。王子,王子好了对吧?啊,但是谁也没有说,后来白雪得了白血病啊,王子跟保姆好好了,比如说这是个故事完事了,那这个故事完事了,是不是这个老和尚跟这个小和尚故事是讲完了的。对吗?能反应过来吗?那是不是?他讲完了对吧,他给他讲完了,那这个老和尚给这个小和尚故事讲没讲完。
22:03
是不是也讲完了。是不是他也讲完了对吧,那他要讲完了以后,最外面这个讲没讲完。是不是也讲完了对吧?哎,这种故事就叫什么,就叫做递归,就叫做递归啊,好理解吗。好理解吗?理解过的人好理解,不理解过的人还很难理解,是吧?那我给你们讲个故事吧,我们去吃海底捞啊,我讲个海底捞的故事,你比如说海底捞在离我们最近的海底捞在哪?有人知道吗?啊,最近的海底捞,比如说比如说在在在在哪呢,在在。回龙观。啊,那我们要想去回龙观怎么去啊?打车对吧,或者坐公交对吧,那比如说我们就以坐公交为例啊,为什么?因为打车太快了,坐公交可以一站一站的去停,对吧,然后呢,有更多接触的时间,那么比如说我们当前从我们的这个点,比如叫做A点要到达这。
23:15
从A点要到达B点的时候,我们要坐公交对吧,公交是不是走这么一条线啊,对吧,那途经几站,肯定N多个站对吧?比如说有这个什么马连店啊啊,有这个流星花园啊,对吧,有这个什么流星花园三区啊,流星花园四区啊,流星花园五区啊。好,当我从A点出发,经历这么多个站点以后,最终到达了海底捞。对吗?那好了,当我在这捞完以后呢。我是不是得回去了,捞完以后回去我是不还坐公交,那么坐公交再往回来的时候,我是不是还要经过54CBB才能到达我的A点呢?
24:02
对吗?所以第一件事儿先是干嘛,先是去。第二件事是回,不管你是去还是回,是不是都会路过这些点。对吗?那OK,第一件事的去就叫做D。D,哦,D是怎么写的?不是这个D加上这个D啊,第一件事是D,当你D完以后,D到了这个点以后开始干嘛呢,往出。归。啊,所以递归准确的说是两步,不是一步,明白吧,哎,先递进去再归出来。能明白吧,哎,那就好比像这个做看那个电影,做那个什么盗墓空间一样,你先做。啊。大人对。你先做梦再出梦是吧,那那你比如说在这个现实的空间里边。
25:03
我们画个小人吧。嗯,笔呢,这个啊啊。比如现实空间里边啊,这个比如说王明伟喜欢的谁呢。喜欢了这个阿鹏。好。这是跟阿鹏牵手了。对吧,你有点想象力好了啊,那么这个时候王明伟比较花呀。对不对,那他老受着这个富婆的管制,他觉得有点难受,然后他突然喜欢了谁呢?喜欢了这个,比如说啊,喜欢了老六。好,但是呢,在这个空间里边,因为他已经有富鹏的站位了,是不是老六不能来了,对吧,所以王你们怎么办?做梦对吧,比如说我这下一层就是梦了啊,那梦完以后在这个空间跟了谁呢?跟了老六。
26:06
对吧,跟老六那么好,在这个空间里边,他觉得说嗯,我觉得老六也挺那个霸道的,我想换一个柔一点的,对吧,那诶。他是不是又开始做梦去下一个空间啊,对吧,那去下一个空间的时候,比如说这个空间谁呢?这个空间比如说李福杰吧。啊,比如说跟李福杰成了,他发现李福杰并没有那么柔,对吧,那于是他后悔了,他觉得还是谁好啊,还是富恒好对吧,所以这个时候他是不是得一层一层往下起,先起到谁,是不是先起到这层来对吧,先让这个现实起来,起来以后,那么这个梦。结束了这个梦,在结束以后再干嘛呢,才能回到他自己原有的现实的空间里边去跟富鹏重重归于好,是不是这么样的一个理论能明白吧?这不就是盗墓空间的那个思路嘛,对吧?那么其实盗墓空间它就是沿用的这个递归的思想。
27:03
啊,就是先去一层一层往里递,递完之后在一层一层往出归,就是这样的,就跟刚才我在这里边随意给大家写的这么一段代码是一样一样的。啊,你看啊,这个代码最终出现的结果是什么?是32100完以后呢,开始出现了横线,然后0123往出归对吗?你看一下代码是不是这样的结果,3210,横线0123归对吗?哎,那么最终这个程序它怎么样走出来这个结果呢?咱把这个程序也一样拿画图来执行啊,大家听好了,我只讲一遍啊,讲递归太耗费元气了。我元气现在明显不足。所以你要认真听,别给我溜号啊,别大眼珠子在那楞楞楞楞了的啊,我看好了。嗯。嗯。我没复制吗?好了啊。
28:00
这是我们的代码。对吧,那么当我调用它的时候。是不是这块调用了对传了一个三,传了一个三以后好,那么进来以后这个N是解。三输出自己也是三对吗?然后问三大于零吗?大于零,大于零干嘛啦。减一是不是走到这里边来了,走到这里边来,注意下面的东西游走吗?没有,但是先不管它啊,比如说我们先刨去这个衣服的时候,我问你他是几。刨去这个衣服,它是不是也是三,你要注意我在衣服区间里边有改值吗。没有改值,我这个N确实减一了,但是确实减它减一传给了谁,传给了他对吗?所以在这里边我这个N是三,这个N是不是也是三对吧?那么现在你再通读一下这个程序,你看我调用完以后,把三扔进来,进来输出一个三,这没问题,这是输出的三对吧,输出完以后进来判断三大于零,所以执行这个函数了。
29:06
这个时候它下面区间还没有执行的,没有执行这个三是干嘛,是不是在等待,等待你衣服区间执行完以后才能输出对吗?所以这个时候一定要用DEMO,是不是就相当于这个函数又怎么样。是不是又被执行一遍对吧?哎,由谁执行的,是不是由这个他来执行的对吧?他执行的时候是三减一,传的是几二进来输出解二对吧?然后这个东西它是不是也是二,但是他能执行吗?不能他在等等什么,等这个if执行完对吧?那进来以后问二大于零吗。大于零,大于零是不是又执行它,那么又执行它是不是相当于又执行一遍函数啊。
30:00
哎哟,我的妈呀。来是不是又执行这一边函数,又执行函数,这个函数是谁调用出来的,是不是由它调用出来的对吧?调用出来以后是什么?二减一对吧?二减一传过来是几啊。一所以到这里面它输出是几一,然后这块同样是不是也是一在等待着输出呢,对吗?这块就不要看他了,跟他没关系了,是不是这是我复制的啊好了,那么这个时候你看一大于零吗。大于零,那干嘛?是不是又走到一个区间了,又走到一个区间,是不是又开启了一块函数的空间。是不是这样的对吧?哎,开启这个函数空间,然后这个时候你看传的什么,传的是一个一减一进来,一减一是谁,是不是零,那它输出这块是多少零。对吧,那同样这块呢,这不也是零零有输出吗?没有他要等等程序执行完对吧,等这个空间执行完吗?那现在问你零大于零吗?不大于零,不大于零执行的是谁呀。
31:09
执行了是不是一条横线对吧,横线执行完了是不是这个if区间执行完了,If区间执行完再输出是多少?零,这个零是不是开始输出了,那好了,到这步为止,这个函数是不是执行完了,它一执行完这个区间是不是就执行完了,执行完以后再输入它是几。一对吧,能理解吗?刘小林。哪个重解一下之行?再来一遍,好了,到这为止啊,现在你来给我看好了,听清楚了再说最后一遍啊。
32:01
DEMO我调用等于三传了一个三三调用的时候是不是三会传给这个N,这个N是不是就三,我进来以后输出这个N是几?三对吗?能理解吗?啊,然后三判断三大于零吗?大于零,大于零是不是走到这个if区间。对吗?走到if服区间,好,现在我们先不管这个义服区间,那么我想问的是这个刨去这个衣服以外,这个东西它输出是几?是不是也是三?对吧,也是三,但是他有执行吗?没有他在等等什么呢?是不是得等它上面程序执行完,它上面程序是谁,是不是这个if区间,当这个if区间能执行完以后,他是不是才能输出。对吗?代码从上到下执行吗?你这段代码没有执行完,我下面那会肯定是不可能执行的嘛,这能理解吧?啊,那好了,那执行到这儿,那咱们知道三大于零是不进到这个DEMO里边来了,进到DEMO里边它是不是走到这个if区间,If区间我调用DEMO的时候,是不是传了一个什么参数,传了一个三减一的参数吧。
33:05
对吧,我一定要用DEMO,注意我一定要用DEMO,是不是就相当于函数又执行一遍。对吗?是不是相当于函数又执行一遍,但是这个函数是由谁调用执行的,是不是由这个DEMO调用执行的?能理解吗?那它调用执行三减一对吧,三减一是几二吧?二传给了谁,是不是传给了他。是不是传到这里边来了。能理解吗?那传到这里边来,我document right输出他自己。二对吧,然后一样,这个衣服区间我们先不看的,那这个东西它是几啊。是不是也是二,但是他有输出吗?没有对吧,他要等等谁是不是等这个预服区间执行完呢?那if区间看那这个时候咱知道咱已经输出一个二了,然后这个N是几,N是二二大于零吗。大于零,大于零是不是符合E维条件,又走到这里边来了,那又走到这里边来,是不是又调用函数DEMO加括号是不是调用函数呢?又调用函数好执行到这儿来,那是不是相当于只要一调用函数,是不是就相当于我这个函数又被执行一遍?
34:13
对吗?又被执行完以后,那接下来这个时候传的是几,是不是二减一呀。对吧,这块是不是二减一二减一是几,一传个一进来,那这块我在输出的时候是几,是不是一对吧,那同样这块是不是也是一,然后他要等待着执行。对吧,等谁是不是等这个if执行完以后啊,那一大于零,大于零是不是又走到这里边来了,走到这里边来,它又是DEMO减一调用了,那是不是相当于我又执行一遍这个函数。能理解吗?那那这个时候一减一为几?零吧。一减一的零是吧?啊,一减一为零零传过来以后进来输出是几啦零,那现在你要为输出完零零大于零吗。
35:05
不大于对吧,不大于零以后,是不是这个空间就不走了,走的是谁?是不是走的是这个L空间,二空间干嘛,是不是输出了一条横线。对吧,所以到现在为止页面上输出的是3210横线对吧,输入完横线以后,这个衣服区间是不是走完了。走完以后再输出这个时节。能明白吗?啊,输出这个是不是开始输出零了,输出完零以后,好这个函数区间走没走完。这个函数空间是不是走完了,这个函数走完以后,那现在是不是往回退呢?这个函数走完了是不是这个。衣服空间走完了,这个衣服空间走完了,是不是相当于整个这个区域都走完了。对吧,这个区走完了再输出他是几。是不是一对吧,那现在这个函数区间是不是走完了,这个函数区间走完以后呢,它再往回归,是不是相当于这块走完了。对吗?那这块走完以后,整个衣服区间是不是又走完了,走完以后,那是不是这块它就可以输出,输出它是几。
36:06
对吗?能明白不?到底能不能?没加也没减。没加也没减,你听好了啊,我先把这个先捋过去啊,先捋过去一会再说这个问题啊,到这为止是不是输出的二能跟上吧,然后那现在这个函数空间是不是走完了,这个函数空间走完以后是不是相当于这个区域走完了,这个区域走完以后刨去这个区域以后,最终输出他自己。三,所以最终输出答案是不是3210横线,然后0123啊是不是这样的,对吧?那问题来了,像刘长林说的,他是怎么走的,这个怎么能归出这样的数,他不是已经传进去了吗?你看好了,在这里边当我调用为三的时候,是不是传了一个三进来。
37:08
这个山是不是传给了他,传给他以后进来输出,他是几。是不是啊?能明白不啊,那这个预区间,我注意整个这个衣服区间,我有改这个N的值吗?我有改变当前这个N的值吗?有吗?没有改变吧,没有改变,那你说我这个在document这个N的时候,它输出的是谁呀。对呀,我再倒后面他的时候是不是输出也是三,这个输出时是不是也是三。是这样吗?那最终是不是我要想输出底下这个三,是不是得等你这个衣服去验程序走完。对吗?但你这一区间走的是什么?走的是一个DEMO,是不是调用函数呢?调用函数传了一个三减一。注意三减一是不是传到了下一层,传给了谁?是不是传给了他?三减一是不是二啊,那这块是不是二进来了,进来以后刀客名单输出他是几。
38:04
二吧。对吧,那这个到后面输出它是几。是不是也是二对吧,那么拿到这里面判断时候问你二大于零吗?二大于零干嘛,我又调用了。对不对,是不是又调用对对姆减一对减一等于几,是不是等于一呀,等于一是不是就直行到了这层来了,是不是传个一过来,那进来以后是不是输出一,他同样带输出是不是也是一。但是他也需要等待,等待什么,等待这个if区间执行完吧,那if区间在这块if区间现在是一一大于零不。大于零,大于零以后,那继续传一减一一减一是不是又走到这个区间来了。对吧,因为你一调用对面不就相当于函数就执行一遍吗?那一减一等于零,那这块是不是就零进来输出,输出的是不是也是零,但是这个输出的零有输出吗?没有,是不是要等到这个异步区间执行完它才能输出啊,对吧?所以这个时候问你零大于零吗?零不大于零,这个异步区间是不是不走了,不走是不是走L区间,L区间是不是输出一条横线,所以现在为止是不是3210,然后横线。
39:09
横线执行完以后呢,那是不是干嘛了,再输出这个N,这个N是几。零吧。是这样吗?那这个函数现在是不是执行完了?这个函数执行完以后,这个东西执没执行完,执行完了,执行完了,这个一区间执没执行完。执行完了吧,执行完以后再输出他是几。一吗?对吧,那这回这个孩子都执行完了吗?执行完以后,那是不是再往回退,它是谁调用的,是不是由这块调用的,那他这块是不是就执行完了,执行完以后这个if是不是就完事了,完事以后输入它是几。二嘛,对吧,那这个函数是不是又OK了,OK以后又归到这里边来,这个DEMO是不是执行完了,执行完以后这个if区间是不是也OK了,对吧?OK完以后再输入他自己。
40:00
三嘛,所以最终我们看到的答案是不是就是3210,然后横线,然后0123。明白了吗?真明白了吗?这回明白了,各位。明白了啊,这就是递归啊,这就递归了解这样就可以了。了解这样就可以了啊,现在地归已经基本上。不怎么用了,不怎么用了。递归一般在后端用的,用的地方有两处会比较多的,一个是便利目录。便利目录。呃,一个是做。那叫什么塑形菜单?塑形菜单的数据,这个塑形菜单叫什么呢?叫做无限分类。啊,任何一个软件里面都会涉及到这个无限分类,你比如说咱们京东里边有没有分类。想一下淘宝里面有没有分类的作用,干嘛?就是为了快速让你找到商品对吧?那么京东里面商品会分为什么?什么手机数码办公。
41:07
对吧,母婴用品什么,这个这个童装男装女装这是不是就分类。在这层分类的下边,会不会再有分类了?还会有吧,对吧,你比如说男装,男装下面还可以分,对吧,分为什么分为春夏秋冬。对吧,春夏秋冬往下还能分为什么,分为这个上衣裤子鞋。男装里面不带血是吧,只只有衣服跟裤子对吧?哎,春夏秋冬里面都能分出不同的衣服裤子来,对吧?衣服裤子能不能往下分,还能往下分它分为什么料了。能明白什么意思吧,那这样的一直分进去是不是就属于无限的了,对吧?但是一般没有最多分类涉及到三层,就是三层分类啊五级,五级的分类已经是最大了,如果超过超过五级这个程序不可涉及。就没有必要了,这个程序,这个程序就没有存活的意义,明白吧,最多会控制到五级分类,所以对于这种分类的时候,用的递归也会比较多。
42:04
然后呢,还有一个什么呢,就是大家可以去考虑一下,我们再去做的这个斐波那切数列能否由能否用递归去算一下。就是通过递归的方式求斐波那切数列可能。三行代码就搞定了。对。但是它代码比较少,但是它效率比较低啊,使用飞奔纳切数列,这个就是使用递规方式计算飞奔纳切数列效效率是比较低的,所以这算一个一个小扩展吧,大家下来以后就是今天这也算今天的一个作业啊,小扩展作业就是不是强制完成的这个作业啊,可完成可不完成明白白吧,然后你可以去尝试一下,看看能不能自已拿递归的方式去算一下啊,这就是咱们的这个递归明白了吗?啊,然后递归完事以后,还有一个最后还数最后一部分内容叫什么。B包。也一样,了解级别就可以了啊,既然你们已经烧脑,咱们就可以一劲一直把脑烧完啊,B包,B包的作用咱先不要去强调这个B包,你听这名肯定没有用,我现在就给你定一个函数,我的要求是什么呢?统计函数调用的次数,我就想做这样一个功能。
43:16
会做吗?不会,我赖一个nu等于零啊u nc function在这里边,我调用一个DEMO,然后在这里边干嘛呢?我nu加加对吗?加加完之后我阿就要这个nu是不是可以那么好,当你调用我这个函数的时候哟,我得唠个好,当你调用我这个函数的时候,它是不是会加加记一次。那么当前我这个函数是不是已被调用一次?是不是调了一次对吧,那好了,那我调用不管调用多少次,那这个时候你看是不是都能帮我统计这功能会不。
44:01
林哥,会吗?会啊,那好了,但是这里面有个问题,这个数据能造假?这个数据能造假,为什么说?因为这块我设计的这个变量,我在这里边定义变量,它是什么变量。全局了对吧,咱们在这里边学变量作用力,变量作力只有两个概念,一个是全局变量,一个是局部变量,全局变量就是在函数的内外都可以使用,局部变量就是在函数里边只能去用。对吧?哎,那你看这个变量既然是全局变量好了,那在这块我来改um等于100的时候,当我把它改变以后,那么你看后面这两个调用的次数对吗。是就不对了,这时候是不是就有问题了,那么有问题了,咱们再解决这个东西,咱们说了我就是要做一个统计函数次数这么一个功能,然后我借助了这个变量,那么由于这个变量是全局的,在外面是干嘛是可以去篡改的,对吧?所以在这里边叫什么在函数外部可以篡。这个全局变量的值是这样吗?那既然全局变量不行,那怎么办?我们要考虑的什么?是不是就局部变量了?哎,那局部变量比如说UNC方式,我再来一个ad吧,括号括号那是不是在这里边来声明啊,对吧?比如说let一个nu等于零,然后nu加加,然后再re一个um,是不是这样也行。
45:23
对吧,那这样的话呢,你看我来落个ad括号调用不用传参对吧,调用来输出一没问题,这块没问题对吧,没问题,那行了,我多调用几次呢。都是一,为什么都是一啊?哎,因为你一调用这个函数的时候,是不是就开始执行到这里面来了,执行到这里面来,我是不是就开始声明,然后加加返回,你再调用到这里边又声明加加返回,是不是这样的。能理解吗?哎,那好了,那这样的方案是不是又不通过了,那怎么办?我还得再想办法,那首先要想办法就是什么,既然我不能让外面篡改的话,这个局部变量是必然的了。
46:07
是不是这样的,哎,也就是说在这里边要想。不让外部篡改对吧,只能是局部变量。只能是局部变量,是不是这个意思能理解吧,那好了,那现在既然说,那每次我调用这个函数,它都会执行到这块。都会给他重新清零,是这样吗?那是不是我只需要做到这个东西,只让他复制初始化一次?就是声明一次变量是不是就可以了,剩下每次我都用这个变量不就完事了吗?是这个道理吗?能理解吧,那这个时候你看我可不可以这样,我不在这里边加价了啊。嗯,不在这里面加加了,我也不在这返回了啊,在这块你看好了,我直接在这改了啊,我再来一个函数,比如叫什么呢?叫做加加加加。
47:04
来个屁吧,没名好了,我随便定义了个P啊,或者定义个so,这是不是函数里面包函数呢?对吗?哎,那OK,函数里面包了这个函数,这个函数完了干嘛呢?我让它在里边nu加加啊加加,注意啊,当前这是子函数用的负函数的变量,那这个变量,这个变量相对于它来说是不是全局的。对吧,这能理解吧,哎,所以我在这里边我可以用这个变量好了,它加加完以后,那么最终是不是就直接输出这个结果就可以了,也就是说so,我调用它。只要一定要用这个变量是不加加对吧,加加完之后我不返回了啊,诶行返回也行,那就是瑞瑞谁啊,是不是瑞这个A呢,对吧,那现在你来看我这个时候好使不。好使吗?不好使,为什么不好使,因为哎,因为每次我是不是都调ad。
48:02
是不是这样的,每次都调用ad,只要你调用ad,这里面是不是就声明。就重新声明了。能明白吧,所以我是不是只需要想办法,当我调用ADD的时候,实际上调用的谁调用的是这个家伙就可以了。对吗?当我调用ad的时候,不能让它真的调用是ad这个函数,而是调用这个家伙就可以了,这是第一个问题,对吧?所以这里边我们要考虑啊,在这块我先写上注释,能跟得上吗?第一个考虑就是当。调用ad函数函数时对吧,实际应该是调用应该是。调用。里面的子函数对吗?子函数这个P而不是,而不是真实调用ad的函数。
49:05
我这么记能理解吗?能吗?哎,那好了,这是第一个我们要考虑的问题,对吧,为什么?因为你一定要用这个ad的函数,它的这个变量。AB函数中的这个变量就会干嘛,就会重新。赋值了对吧,所以很简单,那么我要想这个当调用A的函数的时候,是调用了谁呢?是调用了这个子函数P对吧?那这个时候我是不是就要把这个函数给返回去。对吗?是不是要把这个函数给返回去,也就相当于是在这里边,你看好了,是不是相当于诶。跑偏了啊,是不是相当于这么去写func方审啊,然后没方审先直接推,Re re re,谁一个方式是不是相当于,这是相当于是里面的子函数吧,我是不把这个子函数给返回,这里面要做了一件什么事,就是加加am或者am加加不行,对加加N才对。
50:21
这能理解不对吧,把它返给谁,是不是返给ad对吧,那么也就换句话来说,我把这些先注释掉啊,Ad我先注释掉,别影响我这块写啊好了,那么换句话来说,是不是在这里边,比如说同样我这个呃,UNC括号括号括号在这里边。我用匿名了,Let一个不用的一个ADD是不是这个意思,能看懂不?这能看懂不?哎,我是不是把这个函数返回给了ad,那你现在你想想,当我AP1调用的时候,我调的是谁?
51:03
掉的是不是里边这个家伙呀,对吧,是不是,你看它返回来不是这个函数吗?就相当于把它赋值给了ad一样吗?对不对,那这个数你看好了,我这里边。没有结果。Log打印这个ad来,你看是不是里边这个函数没有错了吧,这第一件事我是不是实现了,那么同样ad里边还是不是还有一个局部变量呢?Led的一个nu等于零对吧?那现在你看好了。我这里一调用它是这个函数,这个函数我一调用它是这个函数,它为什么知道为什么它不调用吗。我是不是只有调用这个函数的时候,它才能把它返回对吗?所以我打印它调用的时候,是不是才是这样的一个结果呀,对吧,那换句话来说,是不是相当于我在这里边,比如说啊,先来一个AA括号,这个时候这个A是不是那个函数是不子函数。
52:09
你看A是不是才子函数对吧?我A括号调用的时候是不是才能出现结果,看到了吗?这明白怎么回事吧,知道为什么刚才我打印ad始终都是那个结构了吧?哎,那好了,那现在第一件事我是不是已经搞定了,能把函数返回给ADD了,那第二件事这个东西是不是只能初始化一次?对吗?只能初始化一次怎么办?我是不是可以让这个函数变成什么呢?变成质调用函数啊。因为自己一调用的时候,这个变量就声明了,声明完以后马上我把这个函数返回给ad了,是不是这样一个情况对吧,所以说第二件事干嘛,就是让负。函数。变。自调用。
53:00
是调用,那你看我先改变它啊,在这里面这是负函数吧,括号。到哪儿?括号括号括号是不是自调用的,哎,那这个时候我们左边代码啊,认真听好了,那只要页面一执行负函数是不是就自调用了一次,调用这个变量是不是声明了,一声明完以后,这个函数又被给赋值给了谁,是不是又赋值给了这个ad了。是不是两件事我都做到了,做到完以后,那我一调用它的时候,是不是就出结果了。一是不是也有了,对吧,那我再调用的时候,你看CTRLCCC来234是不是有了。看明白了吧,那这个时候我还能在外面篡改了吗?比如说A等于十来,你看好了找你是不是一然1234我没有篡改了。能明白吗?能明白吗?啊,能理解不?
54:01
那这就是B包。这就是B包啊,B包的目的就是为了保护变量。啊,保护这个变量不被篡改,并且还能使用,所以他就要必保啊,所以呢,你要光听这个名,它是挺难的,对吧,实际上说白了归根结底就干一件事,干嘛呢,就是保护这个变量别让外面篡改,对吧,同时呢,我还得让子函数干嘛呀,能使用到这个负负五函数的这个变量。对吧,哎,这就是B包的作用。啊,那么。再来看一下这个程序啊,那么首先这个函数一打开以后,就页面一执行,这个函数就被自调用了,自调用了就相当于我开辟了一个新的空间,对吧?在这个空间里边,我声明了这么一个变量是不是这样的,然后紧接着就把什么呢?把这个函数结构返回给了ad,那你看啊,变量我也声明了对吧,只是相当于都是在了另外一个空间里嘛,这个变量我又声明了这块内容我又给干嘛?它又是一个函数又复制给了这个变量了,是这样吧,哎,因为瑞return嘛,它是返回被调用的地方,那谁调用它就返应给了谁,是不是就返回给了这儿,所以在这里边我通过它一调用的时候,那是不是这个结果就出来了,能明白吧?哎,因为在这里边你看好了,这个时候我再去log打印,打印这个ad的时候,你看这个ad是不是还是这个函数结构。
55:23
看是不是函数的结构。对吧,哎,那这个时候我只要一加括号了,是不是就调用了,是不是调用里面的东西了,看明白了吧?哎,这就是咱们的B包啊。这回能理解了吗?能了吧,下课休息会儿青青岛吧。嗯。
我来说两句