00:00
其实在我们GS里面最最复杂的一种数据类型不是对象,而是函数,为什么函数是比较复杂的吧?因为函数可它可变化的东西太多了,也就是说,譬如说举个例子,我们函数首先来说是个对象,对吧?那它是不是就具有对象的复杂度了?那同时它又可以什么执行,而他执行的方式只有一种吗?是不是我有好几种给他调动的方式?听懂不?还有一个问题就是函数有一个麻烦地方就是函数中的this是谁,是不是动态决定的?还记得吧?好,我们先来重新认识一下函数啊,再慢慢说,这里面有几个问题,第一个问题,什么是函数啊?第二个问题还是一样,为什么要用函数啊?第三个问题,既然前面的问题都知道了,下面我们就要说在语法上面我们如何来去定义一个函数。
01:09
函数定义出来了,为了干嘛的呀,是不是自行调用啊,其实这些问题它是有逻辑的啊,也就是说它应该有先后顺序,能不能懂?好我们首先来看第一个问题,整体上来看一下,这是什么是函数呢?好,那不管这个,我们先,因为函数它会用,所以我们先来去做下面一件事情。编程定义实现下面的功能啊,这个不用太说,也就根据你的年龄来输出不同的信息。可以吧,好,那我们来定义函数,这个大家都知道,我就不再去问了,定一个方线写的名字,比如说显示信息叫就叫数O吧。可以吧,要不要接受参数要不要要估计有的同学都知道,老师这到底要不要,我怎么没法判断,那你就要看你的这个业务里面有什么数据是变化的。
02:16
懂吗?这里面变化的数据是什么样?是不是年龄呢?明显说根据年龄输出对应的信息吗?好,下面怎么写,这个应该会写大家A级小于18。那我就输出一个串是吧,啊,这个串我就不用想了,未成年再等等吧,好L是什么?一步A级大于60,哎,就算了吧。OK,最后来一个什么。
03:00
就刚好。可以吧,可以好函数进来以后,下面是不是要使用啊,使用就是调用执行呗。我可以传,譬如说传一个传一个传一个是吧,我可以去传一个,传一个啊20啊,我可以再穿一个那个65哪一个。写写什么,就写了个数。是吧,嗯,哎,那这样的话,我们的这个功能是不是就搞定了呀。哎,怎么两个刚好啊,是不是这里面小于18刚好是刚好这个临界点之外是吧,搞个17好一点,每种情况都测试一下呗,可吧,可以。
04:00
好,这是不是就是一个函数。那现在我们就要总结,你说一个函数是什么呢?函数,什么是函数呢?首先我这个函数是不是用来实现特定的功能,好,那就具有。特定实现特定功能吧,好吧。功能的灯条语句的啊,封装体。嗯。是不是这意思,他是不是个整体,也就是说我能不能就执行这就执行这一个,别人都不执行不行是吧,你说你不传过一个时期不就进来了,但他是不是也执行这个了。这一个整个函数调用的时候,执行的时候是不是一个整体执行的,他们是一个整体所说的封装,你是不可拆分的,我还我这个函数能拆开吗?不能,一旦定义好了以后就不能拆开了,好。
05:14
在这里面一定要强调一个是只有函数是只有函数是什么呢?可以执行的其他数据,其他类型的数据能执行吗?不能执行。能不能理解啊,那现在我们就问了,我为什么要设计要用函数啊,我不用函数能不能实现我想要的东西,哎,那有什么问题了,就我有什么好处啊,对提高代码复用。怎么提高代码费,也就是我不用,我们当前这个得会出现一些什么情况,大家说如果我不写函数。
06:06
那我是不是经常要把这个做几遍呢?能不能懂,也就我现在你看我这不搞了三个吗?我要搞我要有十个人,我要我要十个年龄,100个年龄,1000个年龄。输入代码会写很多重复的代码。能不能理解啊,会写很多重复的代码啊,OK,那我们函数一写好以后,我后面用是不是只需要调用函数就可以了。这个能理解了吧,应该前面也跟大家说过的啊,好,还有一个非常重要的东西,我先写,大家一听就能懂,便于阅读交流。什么叫便于阅读交流了?我把这个大家想啊,其实代码写出来以后,绝大部分的时间都是在人之间,我在看你看,你说你写的代码,你后面看不看,是不是有可能看你写的代码别人看不看,你说我写的代码别人看不懂,那就没办法了,那我们说的是你想状况,你写的代码应该尽量让别人看得懂。
07:18
对吧,啊OK,其实函数体现的是一种什么思想呢?封装的思想是吧?啊封装好了以后,也就是说我读到这了,我是不是把这个函数看一遍,就把这个流程整个看懂了,后面你再用多少遍,我是不是我第一面可能看了第二遍还需要看时间吗?不需要了。是吧?那假设你不用函数的话,你想想看,你的代码是不是全部写在外面的,你是不是从上往下一点点读啊,你怎么知道那个逻辑是一模一样的呢?你在看了之后才知道。但是如果你一旦把这些代码都圈在一个函数内部了,你只要通过函数名调用,这个逻辑就应该是什么是不是一样的?
08:07
对不对啊,所以我们在阅读,无论是你自己还是别人阅读,无论是我们相互之间去交流去沟通的话,用函数的方式肯定是比不用函数的方式要好很多。啊好,下面一个如何定义函数。现在我们是不是用了这种方式定义函数,这种方式叫什么方式啊,叫函数声明是吧?还有一种方式叫什么表达式。对吧,来我们来去两种方式都写一写啊,譬如我用函数声明的方式啊,假设我来一个发来一个FN可以吧?啊在这里面打印输出FN是不串,嗯,这是什么方式。
09:03
明白函数声明的方式是不是好,那我怎么样去用表达式的方式来定义一个FNR呢?啊,这个写一啊,那那下面我们就Y一个什么FN2等于一个方写对吧?啊OK,这种方式我们把它称为什么表达式的方式,他们有有区别吗?是不是有区别的那个概念叫什么来着,是不是变量提升是吧?啊大家应该先有印象,后面我们还会说啊,也就说我们现在这种这这好我就这么用,有区别吗?有没有区别,对于我们当前的使用方式没有太大区别的,对不对,但背后是有区别的吧,背后是有区别的啊看好这是说的是我们怎么样去定义,下面要说的是我们怎么样去什么呢执行调用啊,最最常见的方式,那自然譬如说假设我们有一个函数叫test,那最最简单的方式就正么。
10:19
直接就用我们称它为是吧,没问题吧,那除了这种方式,有没有别的方式,还有什么方式啊?还有哪些方式能够让这个函数执行起来。啊,还有一种方式就是OB节点什么探索是不是也是在执行一个函数,你有人说老师你不是在调用方法吗?怎么叫执行函数了,最终是不是在执行函数通过对象什么调用。是吧,好,还有什么别的方式,六是不是这个看是不是new调用啊,六调用没题吧,还有没有别的方式扩或者apply是不是都可以,或者什么apply学过吧?正面弹什么是obg啊,是不是传一个对象进去,它的意思是什么?实际上它怎么掉的相当于什么调的,相等于OB加点什么test。
11:41
但是我为什么不用右边的这种方式,而要用左边的方式呢?欧上面有的方法吗?这种调用方式只是临时的。让test的方法test成为OB阶的方法进行什么调用?
12:11
是临时的,也就是说本来来说,我这个obj里面有没有test的方法有没有。啊,不知道是吧,来譬如说举个例子,我握了一个obj,等于一个对象可以吧,那下面我能不能通过obg去调用这个啊,我再写一个吧,再写一个方框,再写一个开始了。可以吗?我写个Z点叉叉叉等于一个,呃,规模好,我想用通过obj去调用test to,我能直接这么写吗?来看啊OBj.test to行不行?
13:00
他没有这个方法,怎么尿了,但是GS强大的地方就在这里。我可以让一个函数成为任意对象的方法进行调用,怎么写?派的to点括括水OB接,我怎么证明是OB接触啊,Obj就是这个obj是吧它。通过他来调用柱,怎么证明,怎么证明就是OB掉的。你这么写的也看不出来呀,你你怎么就能确定是欧接去掉的test q呢?怎么证明呢?你就假设是这么调的是吧,会出现一个什么样的结果呀。
14:01
会出现什么结果?OB节点叉叉应该要等于什么?二条硅谷?反过来说,如果它等于了俄硅谷,那就应该是通过OB去掉的什么它to对不对?啊,我们来看一看。有没有,是不是有五,那说明了我们是不是最终是通过obg去交test to。但是我又不能,什么是不能直接调啊,不能直接调用,为什么不能直接调用,根本就没有啊,对吧,但是GS它的强大之处就在于这样一步,我们能看出一个点,什么点呢?
15:01
可以让一个函数成为。指定任意对象的方法进行什么调用?这一点,别的语言是做不到的。啊,也就是说你这个对象产生了,你有什么方法,那你只能调什么方法。但是你看的GS就不这样。就这一步,这这个这个点是其实是挺有用的一种啊。好,那现在呢,我们就把一些关于函数的一些点给大家说了说有的知识呢,大家应该也清楚,但有的知识呢,可能大家不是特别的熟练,大家需要了给大家给大家看一看啊,后面呢,还有一个概念,我们等会再说,我把这个呢给大家提一下。
我来说两句