00:00
是吧,刚才我看好多同学一直纠结于这个这个这个冒号的问题啊,冒号问题可能一直在纠结,我们之前一直用等号,这怎么变成冒号了是吧?有没有纠结这问题没有是吧?啊说完纠结了是吧,这东西其实你问我呢,我也没法给你解释是吧?这问题我没法给你解释,因为我你你问我为什么靠右手不靠左走一样,这东西是什么呀,这叫叫乌龟的屁股叫什么呀?规定啊规定你写等于最简单的,你写等于号它报错啊,你写等于号的报错这块必须得是冒号啊,你说想你给套个大号,给A置套大号,是给A置套大,你是不是在这套个大号吗?是这样吗?这样可以啊,这当然可以了。
01:00
对象是个什么呀?这什么意思呀,我是不是把这个对象复制给这属性啊,我这写个对象,我写大括跟我写个123是一样的,它都是一个什么呀?它是一个值,我把一个值给一个属性,至于它是对象还是它是个number还是个字符片无所谓,它是一个整体,这大块它是一个整体,能知道吗?它是一个整体啊,我是将这个值赋值给这个什么了属性了啊,赋值给属性了,这你给这块,你给它一个写一个处,你能不能看懂啊,处能看懂啊,他就是一个值,你写一个对象,这个对象也是一个值啊,他也是一个值,只不过这个值呢,它稍微特殊一点,一定要注意啊,它就是一个这个值,你不要纠结这个东西,其实咱们刚才好多同学跟我说,这个对象,这个嵌套,其实也不是,它也严格来讲,它也不算是嵌套,就是什么呀,对象里它这值可以设置成什么呀,任何值可以设置成对象,它就是一个值啊,就是一个值,没有一个嵌套的关系,它可以说什么呀,这个对象是这个对的。
02:00
啊属性啊,一个属性,但是这里边你需要去习惯一下这个格式,你就是猛地一看这个格式吧,你你不习惯啊,你不习惯,所以这块呢,需要再去习惯一下啊习惯一下好,这是我们说一个对象字面量,对象字面量呢,说完了,然后呢,接下来我们来接着说啊接着说一个就是更有意思的东西是吧,更有意思的东西就是学完了,基本上就这个东西再学完再往下说,你们基本就得疯了是吧,就得疯了啊诶来新建一个,但是你们先先跟你们说做好一个心理准备是吧,把这个心理先调整一下是吧,但是这还都是简单的啊,都是基本概念,咱们现在学的呢,很多东西都是没什么道理可讲的,都是ES规范,他这么规定的,他既然这么规定的,我们干嘛了,我们就这么做就完事啊,我们这么做完事啊,这块我们来说一下叫什么呢?叫做函数,函数是个啥玩意儿?先说第一个问题,你们猜猜函数是个啥?
03:00
还能是个啥?哎,我们说了,除了我们说了,其实我们刚才讲对象的时候,我们说以后我们学的全都是什么呀,全都是对象,全都是对象,所以我们先给你一个定义性的词,叫什么呢?函数也是一个对象,以后我就不用再说什么了,你记住了以后我说的东西,任何东西都是什么呀,都是对象,除了一个基本数据零,剩下的全都什么呀,全都是对象,我说啥啥都是对象啊,比如说我这来一个什么呢?Document document是个啥呀,对象,哎,我来一个这个cancel cancel是个啥呀?对象啊,他们对应的都是一个对象,那但是呢,我们以后再去研究这个对象到底是什么,但是你要现在知道什么呀,我们的这个一切。都是对象,在网页里你所能看见的东西全都是什么呀,全都是对象啊,全是对象,所以以后我们这个对象是非常非常多的是吧?哎,就不愁找不着对象是吧?好,咱们来说一下,那函数也是个对象,那它和普通对象它有什么区别呢?咱们说了函数对象它它是什么呀?我们说普通对象只能干嘛呀,我们说普通对象就像一个什么呀。
04:09
塑料袋就像一个容器,它是不是只能装东西,装属性啊,那我么函数呢?函数中可以什么呢?可以封装一些这种什么呀功能,或者封装一些什么呀代码啊,封装一些功能,封装一些什么呀代码,然后呢,在我们这个需要时可以什么呀?可以诶可以执行这些功能,或者执行我们这些代码啊封栏这些功能什么意思?我们先来说个需求啊,说个需求假设呢,我这有三行代码,我这来什么呢?cancel.log一个什么呢?哎,我是第一行,咱们简单写一下啊,然后这来一什么呢?这是我是第二行,这来一个我是第三行,我是不是这有三行代码啊,三行代码,这三行呢,我这运行它是不是三行都执行了呀?哎,假设我这三行代码是一个完整的功能,是一个完整的功能,可能我完成了一个某项功能,它可以什么呀,做出一些。
05:09
诶效果啊,它是一个完整的功能,也就是说,说白了这三行是一个什么呀,是个整体,能理解吗?哎,是个整体,诶但是这个整体呢,你说整体简单整体,你给它干嘛呀,套个代码画是不是整体了呀,哎整体,但是这整体还有特点,这整体呢,这三个这哥仨呢,我不仅仅要执行一次。可能在这页面里头要执行什么呢?我要执行十次,我要执行100次,换句话说,我有100个地方,我需要调用这三个代码,那怎么办呀。我怎么办呢?我有100个地方,但注意了,这用个循环行不行,循环你这100次是不是得都一块掉啊,我这什么呢?这个可能在什么呢?在这14行这掉,然后呢,下边一回可能在哪啊,在31行调中间可能还有一些什么呀,其他代码,然后呢,下边可能在什么呀,310行去掉,也就是说我在这个页面里是不是需要在不同的地方去调用他们,但是问题来了,我现在这么调麻不麻烦呀,是不是太麻烦了呀,我是不是得把这三行都复制过来呀,但是你这三行还好说,你要是30行呢,你要是300行呢,每次都复制是不是太麻烦了,还是那句话,我不嫌复制麻烦,复制不麻烦,什么麻烦,数也不麻烦,我改麻烦呀,你以后要改了,你是不是得一个地方一个地方去改呀,所以这个呢,它不方便复用,那我想干嘛呢,那这玩意怎么办。
06:36
诶,我是不是把这东西统一给它存在一个地方啊,诶我统一给它干嘛呢?给它存起来,我想用的时候干嘛呢?我再给它取出来是不是就OK了呀?那这个问题来了,存哪呢?哎,就是存到我们这个什么呀,函数里啊函数里,所以注意函数也是一个定量,它可以封装一些什么呀,功能,换句话说函数里边可以什么呢?诶函数中可以存储一些什么呀,可执行的呀,程序,诶可以封装,诶可以保存一些这什么呀,代码,然后呢,在需要的时候干嘛呀,调用啊,在需要的时候调用,那我们来看看,那我们既然它要存东西了,又是一个容器,那我们是不是要先创建一个对象啊,怎么创建对象呢?我们来说一下,这我们来创建一个这个函数对象,哎,那创建一个函数对象,我们来看看怎么创建直接,还是那创建对象我们就离不开谁呢?离不开我们这个构造函。
07:36
就创建object的时候,我们是obj,等于一个new,一个object,这是一个对象吧,这是一个普通对象,而函数对象呢,就不这么写了,来我这换一个名不叫obj了,叫什么呢?叫做FN啊,函数的一个简称,函数呢,我们就叫一个什么呀,Function啊,函数叫function,那这里边呢,那你既然是函数,你也不能new object,你要new一个谁呢?New一个function啊,一个function,那这里我就创建好了一个函数对象啊,函数对象来我们来看看,直接来一个cancel.log这个FN就是一个函数对象,我有假印,诶是不是出来这么一个东西啊,那它是啥呢?我们先不管它,它打印的是一个函数的一个结构,我们来看什么呢?我们来看一个这个type of fun,走function啊,Function大家注意它也是一个对象,我们来说使用什么呢?使用我们这个type of检查一个函数对象时会什么呢?会返回。
08:36
哎,Function式啊,会返回function式,诶那现在我们来说了,我这对象里边有没有东西啊,但你打印你已经能看到了,是不是空了呀?哎,空了这里边什么也没有,那我们不是说这里边可以封装一些功能一些代码吗?就说你最次最次我这边是不是可以封装点这个语句啊,诶封装语句那这块怎么办呢?我们来说一下,我们可以什么呢?可以将要封装的这个代码以这个字符串的这个什么呀形式,哎,传递给我们这个什么呀,构造函数,换句话说,在构造函数里我可以传一个什么呢?传一个字符串,但是注意了,这个字符串里东西比较特殊,它不是普通字符串,它需要什么呢?是我们的这个代码的字符串,比如说我这写一什么呢?我写一个这个cancel,点一个log log写一什么呢?写一个诶这来个单引号写什么呢?写一个诶,Hello。
09:36
哎,这是我的第一个函数,然后来一个分号,你要注意了,我这个构造函数里边传的是一个。什么玩意儿字符串,但这字符串有特点了,这字符串是个什么呀?是一段GS代码吧,诶G代码等于是干嘛呀,我现在把这一段代码存到了我们这个函数对象里啊函数对象里,那现在我们再来看,直接来一个cancel.log一个fun,我一保存走你诶你看。
10:09
是不是里边有代码了呀?哎,有代码了,但是注意了,我这封装的代码,这函数它执没执行啊,没执行吧?哎,没执行,所以注意我们来说一下叫什么呢?封装到我们这个函数中的这个代码不会立即执行,也就说你仅仅是干嘛呀,我仅仅是把它给存起来了,就像我那个枪一样,我把什么呀,我把子弹给装上了,但是不是说这个子弹就飞出去啊,他得等我什么呀,就等我开枪吧,哎,同样函数什么时候执行啊?哎,函数中的代码,呃,会我们这个函数调用的时候干嘛呀?执行啊,会在函数调用的时候执行,那我们来说怎么调用函数,怎么调用函数呢?调用函数就什么呢?我们叫做函数来说,语法函数对象加上一个括号,哎,就是函数对量得加。
11:09
怎么样,就是函数对象来一个什么呀,来一个括号啊,来一个括号,那现在我们来看我现在这块函数对象是谁。是不是就是f fun啊,哎,放f fun,那我这来什么呢?直接来一个f fun加上一个什么呀,括号表示什么呢?我再调用这个fun这个函数,那当我调用函数时会有什么现象呢?当调用我们这个函数时,函数中封装的这个代码会什么呢?会按照什么呀,按照顺序执行啊,按照你编写的这个顺序执行,我现在一保存咱们来看啊,走你。是不是直行了?哎,Hello,这是我的第一个函数,来那我再调一次,我调两次吧,来一保存是不是直行两次啊,诶来我再调一个,我是不是调三次呀,再来保存走,你是不是直行三次呀?哎,你是不是调几次它就直行几次呀?诶那我们来说,那这有什么好处啊,假如说我想去重复的执行这个代码,那现在我是不是就写了一段啊,我能不能写长一点啊,我写100行行不行啊,没问题,你只要愿意写都可以,哎,那我们说有什么好处啊,我在24行想用,我调一下,我在240行我想用干嘛呀,我是不是也调一下啊,在3000行想用我是不是也调一下啊,用起来是不是就比较比较方便呀?啊想在哪用就在哪用,而且还有什么特点啊,我如果修改,我还用不用分别修改了,我只改这一个,是不是剩下的全都改了,哎,全都改了啊,所以注意函数它也是一个对象,只不过什么呢?在我们函数对象里,它封装的。
12:52
是些什么呀?一些可以执行的这些代码啊,一些可以行的这个代码,哎,那现在我们来说函数也是个对象,它有没有普通对象的功能啊,比如说我向函数里添加一个属性叫hello,行不行,行不行,诶来我这cancel点一个log,来什么呢?FUN点一个hello,我这一保存走你是没问题啊,哎,所以注意啊,函数对象具有所有普通对象的功能,但是呢,它比普通对象更加的强大,它里边是可以封装可执行的代码的啊,可执行代码的这个看明白了吧,但是说了这种方式呢,其实。
13:31
不好,哎,我们来住了啊,这种方式不好,我们要说什么呢?我们在开发中呢,哎,我们在实际开发中很少,或者什么呢,就是就基本上就不使用,很少使用我们这个构造函数来干嘛呢?来创建一个函数对象,也就是说这种方式我们开发的时候呢,基本上是不用的,基本上不用的,有同学说了不用。
14:00
说的什么是吧,不用说了什么,为什么要说,主要是让你理解一下,一定要理解函数什么呀,函数也是一个对象,使用告造函数上呢,一定是一个什么呀,一定是一个对象啊,一定是一个对象,那你不让我用这种方式,那用哪种方式呢?我们来说一种叫什么呢?叫做使用我们这个函数声明来干嘛呢?来创建一个函数函数声明啊,函数声明我们来说一下它的一个语法啊,语法怎么写的,怎么写的呢?函数声明首先我们要写一个什么呢?写一个function关键字,Function关键字后边空格跟的是一个什么呢?叫做一个函数名,函数名里边是一什么呢?是一个括号里边什么呢?叫做一个行参,行参一,然后呢,逗号来个行参。二然后给他点再来一个行参,嗯,换句话说,这些东西我是不是可以传传多了呀,但是注意啊,我这给他套一个什么呢?套一个中括号,我在这儿又套了一个中括号,中括号什么意思呢?表示。
15:08
可选的有语法,它的中号你就记住是可选的,什么叫可选的呀,这东西你写不写都行啊,你写不写都行,然后呢,后边跟着一个这个大块,大块里边是写的什么呢?写的我们这个语句,语句这个大块里边就是什么呢?相当于我们这个函数的一个体啊函数体那就相当于什么呢?我们可以把这里边代码写到什么呀,写到我们这个函数体里,诶我们来看看怎么写啊,怎么写,直接来写一个叫做什么呢?首先你使用的是这个function个字,后边跟的是一个函数的名字,那我们这个名字呢,就叫一个FN2吧,哎,FN2,然后后边跟一什么呢?括号,括号后边跟着一个什么呀,大括,那现在呢,我们就创建好了一个函数对象,对象的名字叫什么呀?叫FUN2啊FUN2好,那现在来干嘛呢?来cancel.log log一个这个。
16:09
FUN2,然后一保存走你。是不是出来了呀,名字叫F02,但是里边有没有代码啊,没有代码,因为我还没有往里边填的吧,但是你注意我这种方式和那种构造函数其实是一样的啊,但是这种形式呢,它的结构是嘛呀,更清楚一些啊,更清楚一些,那现在我要封装代码,怎么封装啊,直接写到什么呀,函数题里直接写到我们这个大框里怎么写,直接来一个cancel,点一个log,诶来什么呢?这是我的这个,诶第二个函数写这么一个,现在我一保存就表示什么呀,在我这函数里封装了一行代码,叫做一个cancel.log,这是我的第二个函数,那现在我来保存,你看是不是了解里边就有代码了,哎,就代码了啊,诶,而且你还要注意的是什么呀,这块用不用写字符串啊。
17:00
不用写,直接就写代码了,比我们字符串这种形式写起来干嘛呀,更加的方便啊,更加方便字符串非常不好维护,但是这种呢,非常的这个方便我们去维护,还是这个情还是这个情况,我这封装了一行代码,我这执没执行没有执行,为什么没执行,是不是没调用啊,诶所以这块怎么需要干嘛呢?调用我们这个f fun啊,怎么调啊,直接来一个f fun,二来一个什么呀,圆框一保存是不是就。就掉了呀,一调它里边代码就执行了,诶那同学可能说了,老师这我觉得挺麻烦的,你直接写cancel.log不就完了吗?但注意了,cancel.log我这一调是不是只盯它一个呀,但是这函数里我是不是只能封装一行,来我再写一个,来一什么呢?Alert alert来一个什么呢?哈哈哈哈,然后呢,我再来一个document,点一个right来一个什么呢?诶,来一个呜呜,保存我写这么一个东西啊。诶来,刚才我调FU2还只是执行一行代码了,那现在我一调个码了,是不是我调一个相当于调调三个呀?哎,来,我这一保存走,你A乐出来了,看到lo给出来,我一点确定。
18:16
这是不是也出来了,哎,这也出来了,一行是不是顶顶三行呀,跟那什么呀,那那个什么广告似的一片顶五片,我这是一行是不是顶顶三行啊,你如果是封装六行呢?我是不是一行顶六行啊哎,你可以干嘛呀,可以在这个函数里封装大量的这个代码,但是我调用的时候只需要什么呀,是不是一行代码就搞定了,诶一行代码搞定啊好,那这是我们说创建函数的这种方式啊,F02叫做一个函数的一个什么呀,说明啊,函数说明关键字,函数关键字后边跟的是一个函数名,然后后边是我们这个参数列表,这行参呢,咱们先别管,我们现在先不写,我们先说一下我们这个基本结构就OK了啊,基本结OK了,这是一种方式,然后再说一种方式,再说一种方式啊,还有一个什么呢?这个我们叫做函数声明,还有一个叫做使用我们这个叫什么呀,叫函数表达式啊,函数表达式的方式干嘛呢?来创建一个函数,它就是一个名字啊,创建一个函数,我们来说一下怎么充电的,那它其实呢。
19:16
也是一样的,直接来写一个啊,直接挖一个叫什么呢?函数名干嘛呢?等于一个叫什么呢?叫做一个function,等于一个function后边跟一个括号里边同样也是可以写我们这什么呢。形参在这儿呢,同样也可以写我们这什么呀,语句啊,也是这么一个结构,它只有哪区别了,哎,这函数这是不是没有没有名了,哎没有名了,哎来我们来看看啊,直接写一个来一个function function后边跟一个括号,你看这个跟我们上边差哪了。是不是就差这个名了呀,哎,名了这种呢,我们叫一个什么呀,叫做一个匿名函数,什么叫匿名函数啊,就什么呀,没有名的函数啊,没有名函数来一个cancel.log log来一什么呢?哎,我是这个匿名函数中封装的这个什么呀,封装的这个代码我这一保存,但是注意啊,匿名函数,你说这有没有意义啊。
20:20
没有意义,为啥呀,它没有名,你整完了,你是不是也用不了它呀?诶你也用不了它,所以这样注意我们是用不了它的,所以我们一般不会这么样,我们声明一个匿名函数干嘛呢?匿名函数我用不了,但是我可以干嘛呀,我来一个Y,一个FUN3等于它干嘛呢?我是不是创建了一个变量叫FUN3呀,这个变量保存谁呀?是保存的是我这个函数对象啊,哎,所以注意所谓的函数表达式,其实干嘛呀,就是创建一个匿名函数,然后将这个匿名函数的对象赋值给一个什么呀变量这两种方式,其实呢,没有什么。
21:01
太大的区别啊,没有什么太大区别,基本上都是什么呀,都是一样的啊,都是一样的,我们来看,那现在我要掉它,我要怎么调,哎是不是就是FU3加上一个括号啊,一保存走,你那就执行了呀,哎就执行了啊,所以这是我们说两种方式,一个是我们这什么呀,函数说明,还有一个是我们这个函数两式,这两种方式呢,目前来讲用哪种呢都行,区别呢不是很大,一个呢,其实哪个简单一点,是不是上面这种啊,我们这种函数声明这种方式更加简单呀,你这还得去创建一个这个变量,相对来说有点麻烦,但是两种呢,我们都会用到这种呢,是将一个匿名函数赋值给一个变量,但是这块你写的时候你要注意了,我这是在干嘛呀,是不是在给一个变量进行赋值啊,也就说白了,我这是一个什么呀?是一个赋值语句吧,那么假设我这写的是什么呢?等于一个处,你看我这么写少什么东西,是不是少一个分号。
22:02
啊,所以注意你这也是赋值语句,只不过赋值的是一个函数项,那这呢也应该最好写一个什么呀,写个分号,因为它是一个什么呀,整个是一个赋值语句啊,赋值语句,而上边这种呢,还用不用写了,不用写了,因为它就是声明一个什么呀,函数啊,什么一个函数,所以这里边我们这两种方式啊,两种方式都是创建函数的一个方式,在这个函数里边可以封装一些可以执行的一些代码啊,其实一共是三种方式,一个是使用我们这个构造函数,但是这种方式呢,我们。不用啊,不用,你就了解一下就行了,然后呢,主要用这么两种方式,一个是我们这个函数的一个什么呀,声明格式就是方式关键字后边跟着函数名,然后后边是一个行参列表,行参我们待会再说,你先给它忽略,然后括号后边跟着一个什么呀,大括号里边是我们这个语句,而这种方式,我们这个函数表达式的方式呢,只不过是干嘛呀,生明一个匿名函数,然后赋值给了一个变量啊,一个变量,好,那这块呢,我们来停一下。
我来说两句