00:00
我们刚才说这个练习啊,我们说你定了一个模块,在模块中提供两个方法,一个是I,还有一个是marty,啊Mar我们这个乘法的方法,那其实这个方法其实这没啥技术含量,对吧?哎,那我要如果这么写,比如说我这来一个三个人来一个爱的这样子写行不行。我这来一个A逗号B,这么写行不行?哎,这么写你写多少个函数,外边能看见吗?看不见啊,看不见,所以如果你希望这个函数可以这外部看到,应该怎么写,应该是叫做一个X pose,点一个X等于function,也就说你要把这个函数设置成什么呀?是不是设成这个expose的方法呀?哎,那这样外部才能看见,然后特一个A加B,然后你要再想整一个Mar,直接expose,点一个这个Mar等于一个这个function,来一个A逗号一个B,这样return一个A乘以B是不是就OK了?哎,那这就是一个最简单最基本的一个模块了,那我们来说这个模块我要用要怎么用,比如说我在零三里要引用这个模块怎么办?诶,我就需要挖一个ma等于一个这个require require,我要写路径,我应该是叫做就叫ma.GS然后在这我们是不是可以用这个ma来代表这个模块啊。
01:20
比如说我想求两个数的一个和我直接来一个,这个cancel。Canl点一个log mass点一个,哎,你看这是不是有提示了,就告诉你可以掉了啊,艾特一个123,逗号一个456,这样一保存,那我们来运行走是就出来结果了,哎,就说这个模块的方法就给我们引入进来了啊引入进来了,所以这目前来看,它和我们那个引入外部的GS文件管基本上是一致的,但是不同的是我引入那个外部引入那个GS文件什么呀,它里边写的东西在我们当前里边是不是全都可见呀,而这个实际上它是干嘛呀,它是把它们都封闭到了一个函数里啊,都封闭到一个函数里,默认情况下你写的内容干嘛呀都看不见得,通过exp导出以后是不是才可见呀,哎,才可见啊,所以这块要记住了啊,这么一个模式化,那我们接着来说啊,接着来说,然后再说一个东西,我们叫什么呢?其实这东西刚才我们已经说了,叫做一个模块的标识,什么叫。
02:27
模块的标识呢,什么叫模块标识呢?在这我们来强调一下啊,那我们来说咱们在这用了一个块,那其实什么呢?哎,我们使用我们这个。哎,引入什么呢?引入我们这个外部模块时,用的就是什么呢?使用的就是模块标识,比如说其实这个路径就是一个什么,就是一个模块标识,模块标识有什么作用,那我们说什么呢?我们可以诶通过这个模块标识来干嘛呀,来找到我们这个指定的一个模块,所以这个路径是不是就是让我们找到模块的一种方式啊,哎,一种方式啊,这叫做一个模块标识,那模块标识是只有这一种吗?不是啊,不是,那注意了,我们这个模块我们要分成两大类啊,模块我们要分成这个两大类,但是具体来说,其实要细分的话,还有第三种,那我们不管,那第三种,我们只说这两种,一个叫什么呢?一个叫做核心模块,还有一个叫做一个文件模块,哎,什么叫核心模块?核心模块指的是由什么呢?
03:41
由我们这个node键no的这个什么呀?引擎提供的什么呀?模块啊,由noe引擎提供的模块,而文件模块指什么呢?指由我们这个用户自己创建的模块啊,创建的模块,那这块注意核心模块我们是不是还通过路径去引了注意,不是了,核心模块的这个标识就是什么呢?就是这个模块的一个名字,比如说我想用我们note里边给我们提供的文件模块叫做FS,我要怎么引入,直接挖一个这个FS等于require一个FS用不用写路径了,不用写路径了,就直接写名就行了,因为这是他核心给我们提供的啊,或者一些这个通过NPM下载的话,都可以直接写名字,那这样模块就是完了,就已经自动的引入好了,我们来看看是不是直接打印一下这个FS。
04:38
这个猫就我也不引入了,因为它老打印啊,这一保存我们来运行一下做。看到东西了吗?这就是FS模块,所以注意像这种核心的模块,或者是NPM已下载的模块,直接写名字就行了,不用写什么呀,不用写路径,为什么呀。因为这模块在哪,我们是不是也不知道,哎,这只有他自己知道,他自己去寻找的啊,他自己寻找的,而文件模块是由我们用户自己创建的模块,那我们文件模块的标识是什么呢?文件模块的标识是什么呀?哎,就是我们这个文件的路径啊,文件的路径可以是我们这个绝对路径,哎或者什么呢?哎或者是相对路径一般都是什么呀?相对路径啊,一般都是相对路径,那注意了,相对路径我们要使用什么呢?使用点或点点开头一定注意啊,这就是我们文件的一个标识,那所以关于这个模块其实就这么多了啊,主要这么多一个我们叫做模块的这个,诶引用模块的定义,还有一个模块标识,主要是这三部分,你懂这意思是吧?哎,然后再往下说。
05:54
来我这呢,来新创建一个文件零四,我还叫model model,那我们要说一什么问题呢?看这我这Y一个这个什么呢?Y一个这个变量A等于一个这个十,那注意了,我如果说在别的模块里去引入我这个零四,我这个十在别的模块里能不能看见,看不见,因为默认情况下,我这个模块的代码都是单独在一个函数里运行的,也就是说这一堆东西对于外部来说是不可见的吧,哎,不可见的,那我们说说,那这到底是不是一个全局变量啊。
06:36
是不是,哎,不是全局变量,那如果是全局变量,那是不是就可见了,可见了,诶那可是同学会感觉老师我觉得你这样光说吧,我还是觉得不太可信。对吧,你这光说你要摸我们怎么办呢?对吧?哎,你能不能证明给我看,能不能证明给我看呀?哎,那这里边我们来看看怎么去证明这个东西,怎么来验证一下这个东西,那我们要说的,要让你们去验证,怎么去验证,我现在跟你说了,这个A不是一个全局变量。
07:12
我,我说完这句话,同学们怀疑我,我老师,我好像觉得你骗人的。好让你证明,怎么证明他是错的,怎么证明他是错的。在认为引入它还是间接证明的,有没有办法直接证明?啊。哎,我们想想在我们GS里全局变量有什么特点。哎,全局变量是window的属性对吧?哎,那也就是说我只需要看window里边有没有这个属性,我是不是就知道它是不是全局变量了,对吧,但是没window。哎,没window,没window,它也会有一个和window功能一样的东西,我们这叫什么呢?叫做一个g globalbe,叫做一个这个g Lou gbal叫做一个globe globe什么意思啊,哎,全局全球的意思啊,来说一下,在我们这个node中有一个这个全局对象,我们叫什么呢?叫做一个g globalbe啊g global那它的作用的作用和我们这个什么呀,和我们这个,诶网页中的什么呢?网页中的这个window类似,它没有,但是它没有那些什么窗口,这些方法,什么set因度,没有这些东西,但是它什么呢?和window类似什么呢?在我们全局中创建的这个什么呀,创建的这个属性,诶创建的变量都会什么呢?都会作为这个g global的什么呀,Global的这个。
08:56
属性保存在什么呢?在全局中创建的这个方法函数,哎,都会作为这个什么呀?哎,Global的一个方法保存,那这个是不是global的方法保存,那这是不是跟我们window特点一样啊,那既然是这样的,那我们就要看了,诶个global.a。
09:19
如果有这个东西证明,那A就是全局变量。对吧,那证明我就是在骗你。对吧,所以我们来看看有没有有没有这保存一下,我一运行走你,哎呀,还真没有,还真没有,那同学又说了,没有也不能说明不是那个global卜,你可能就编出来了,对吧?哎,那你如果能证明全局变量的确会成为个logo的属性,那才行,对吧。哎,那问题来了,我怎么声明一个全局变量?在函数里,我怎么声明一个全局变量?
10:03
如果我把Y1去,它是不是就变成全局变量了,还记得吧,你说我要不用window,不用他说默认就变成全局变量啊,那这时候再看格罗布有没有直接再运行走你。是有了呀,所以注意什么,注意我们这些代码它都是局部的变量,都是在一个函数内部,它是不是全局的,不是全局的默认在页面里干嘛呀,都是看不见啊,都是看不见的,这块能理解吗?哎,所以又说了一个global啊,多有个window,类似全局里边的内容都是保存到格global里边的,哎,那同学又说了,老师,我觉得你这个还是没有说服力。但这是我自己说的是吧?可能你没有同学这么想是吧,还是没有说服力,你说这些代码是运行到一个函数里的,这函数跟哪儿呢?这函数跟哪了?你怎么证明它是在一个函数里运行的呢?
11:03
怎么证明,那现在注意了,现在我要证明的是什么?我要刚才我是证明了这个变量确实是局部变量,不是全局变量,对吧?那现在我要证明的是这一堆代码它确实是在函数里运行的,而不是在函数外部,那行怎么证明,这没有新知识啊,我们以前的知识,现在我就就你就当是浏览器。现在我问你这个代码是哪执行的,我要你证明给我看,怎么证明,怎么证明它是在函数里。怎么证明,那我们是不是需要找到有那么一个东西,只有函数里有。函数外边没有的这么一个东西。有那么一个动力,哎,这次。这次全局里也有,全局里这次也是window,这次全局也有。有一个东西和这很像,很接近了。
12:01
和这次很像了,哎,叫arguments,哎,As叫做一个S,哎,Arguments是谁呀?是不是我们叫做一个尾数组对象啊,后者叫做一个类数组,它是分割我们函数的十参的啦,哎,十参的,那我问你全局里有阿哥门次吗?没有,它压根是不是没有十参呀?所以如果这里边有arguments,是不是证明它的确是运行在函数里了?哎,有没有,咱们来看一看,这抛个红线好像不太靠谱是吧?来咱们看看很紧张是吧?来走你。啊,确实有,而且最关键的哥们这13还不是空的,它是不是有五个13呢?01234是五个13啊,哎,确实有阿格兹,那从这一块是不是又侧面又证明是不是这一块的确是运行到一个。
13:03
函数里啊,看懂了吧,选举里是不可能有阿格文斯,但是我们还是会有可能觉得干嘛呀,还是不具有说服力,你们觉得有说服力吗?那我说不用瞎说了,我还是对你们这个好奇心很很不重是吧?很不重,那现在我想再往下看看什么?既然你是运行在函数里的,我要看什么?卫生。我要看什么,你让我看看那函数不就完了吗?你函数东西弄出来了,那就没得看了,对吧?函数要弄出来还不认,那就没得说了,对吧?哎,那我们想想,那我能不能看到这个函数。能不能看到,哎,Argue都有了,Argues里边有个属性叫什么?是不是叫coly啊,哎,我们来说一下argue这这玩意儿记得吗?啊命点一个这个扣里还记得吗?没说过是吧?没说过正好就在这儿说了,这个属性现在用的不多了,或者说即将被废是吧?即将被废,但是这个东西还在我们这儿有点用啊s.call这个属性保存的是什么呢?保存的是我们当前执行的函数对象,说白了我现在函数是谁,这个扣里干嘛呢?就是谁,所以我这如果再点一个这个扣里。
14:39
扣里,它打印出来应该是谁呢?应该就是我当前正在执行的那个函数,这一项能懂我意思吗?来看看有没有直接运行,你看谁function function是不是确实错了?哎,所以注意我们已经获得那个function了,但是这个时候我们是不是最好能看到那函数的结构啊?怎么看其实非常简单,如果我直接调的话,它是把这个对象给我打出来了,而什么呢?我如果加一个字符串,我说不给它做个拼串,拼串它会把这函数会调用to string把这函数结子给我打出来,这样一保存代运行。
15:21
哎,可算找到我们要看的这个东西了。看到这个东西了吗?来CTRLC啊,我给它粘到外边了,因为里边会有注释签到的问题,粘过来发现什么了?是不是我们已经看到这函数的这个真身了,哎,我们发现什么问题,哎,我们来看看啊,其实这个一直到这儿这一块是不是都是我们自己写的呀,而上边的是不是不是这是哪来的。这是no的GS给我们加上啊加上,所以这一块我们要说一下,说什么呢?这块注意啊,当我们这个node在什么呢?在执行我们这个模块中的这个代码时,它会干嘛呢?诶,它会首先在我们这个代码的最上部啊,在代码的这个最顶部加,添加干嘛呢?添加如下代码,什么代码最上边就这关。
16:24
添加如下代码。哎,在最上边添加态代码,而什么呢,在我们这个代码的这个最底部添加什么呢?如下代码哪个呢。大块大块,说白了,我们这个代码虽然我们写完了是这个样子的,但是干嘛,但是实际上node在执行的时候,它用一个函数把这个玩意儿给你买了包起来了,所以他们还是不是在全局了,不是了,那你都看到这函数是不是就已经很清楚了,哎,很清楚了,能懂我意思吧,所以注意模块里的代码都是包装到一个函数里执行的,所以这里边定义的变量全都是什么,全都是局部变量啊,全都是局部变量,除非你说我老师我不用味。
17:15
但是也不推荐你去这么用啊,不建议这么用,好,那接着来看,诶,那刚才我们用到这些模块,你们还有没有别的疑问呀。这这块怎么就用了。这expose怎么就用了?这玩意儿哪来的呀,哎,可能一上来就想,这好像就是个全局变量是吧,全局的函数,全局的方法,那其实它是不是不是哪来的,它到底哪来的来看函数。是不是函数里边有参数啊,哎,有参数啊,所以注意我们什么呢?我们这个,哎,在代码最底部添加出代码,那实际上什么呢?实际上我们这个模块中的这个代码都是什么呢。
18:06
哎,都是包装在什么呢。包装在一个这个函数中执行的,而这函数有谁要用的?是不是由我们note g这个引擎去调用的呀,哎,引擎调用的并且什么呢?并且在函数执行时。同时哎,传递进了什么呢?哎,这个五个13,哪五个13就是这个兄弟五个,刚才我们也看到了传没传呀,打阿哥时候我们是不是看到索引从零一直到四都有啊,哎传了啊,我们再看一眼可能忘了是吧。来我把这住了啊,把这住了,咱们这样我我不打印值了,我直接来一个什么呀,来一个Les,我是不是打一下它长度啊RGTH啊,直接运行走你几个五个传不传呀,哎,传了,所以它实际上传了五个这个十参哪五个把它粘过来。
19:08
第一个我们叫做X post,第二个叫做require,第三个叫做一个module,然后是下划线file name_director name,那我们先看第一个,其实前两个我们是不是都很熟悉了,哎,Expose是干嘛的?哎措该对象用来干嘛呢?哎,该对象用来将我们这个什么呀?将我们这个呃,内容,将我们这个属性,哎,变量内部变量或什么呢?或函数暴露到什么呢?暴露到这个外啊,暴到外部,那这是我们说的一个透ose为什么能用?一定注意为什么能用,它实际上是我们的函数里边的参数,所以我们是不能用啊,哎,所以能用啊。好,再来看下一个叫什么呢?叫做一个require require是个什么?哎,它是一个函数,哎,函数它用来干嘛呢?用来引入我们这个外部的一个模块,它。
20:08
是不是也是参数啊,哎,也是参数,还有一个我们叫什么呢?叫做一个model。Modu是谁?Modu什么意思?模块啊Mo,哎代表的是我们当前模块本身啊,模块自身,所以注意这个model就是谁,这个model就就是我整个当前这个拈块,哎就在模块,那实际上什么呢?实际上我们用的这个expose就是什么呢?就是我们这个model的。属性就是model的属性,所以在这我们来看一个东西。看什么cancel.log一个,我们先打印一个XP,然后再打印一个什么呢?打印一个这个mole.exexp啊model exp我们来看,直接运行是不是两个空对项啊,其实这两个是数啊,它是一个东西,我们来看。
21:16
保存我们运行一下走你是不是错啊,它俩是一个啊,而model就代表的是我们模块本身,而it错,实际上只是模块里边的一个属性啊,一个属性,所以在这注意了,我用expose或者用什么呢?Mo mole modu.expose它是不是一样的呀,这两个这两种用法其实是一样的,我这一保存咱们在这儿还是运行一下走你。这个是。这住了啊,我们把这个打开,这是一运行走,你是不是一样的呀?哎,所以注意你用ex expose导出,还用猫逗点X导出都干嘛呀,都可以,所以注意我们既可以使用我们这个aspp ex导出,导出也可以,什么呢?也可以使用我们这个model model表这个to,它俩本质上是一样啊。
22:16
本质上一样的,那有什么区别,待会儿我们再说,但是你要注意本质上是没有区别的,它实际上指上的是同一个对象啊,同一个对象好,然后再往下说,下边还有一个我们叫做file name file name file什么玩意,文件夹,文件夹的一个名字,来我们打印一下啊,直接在这我来一个cancel点一个log,一个这个下划线,一个file name啊打印一下,我们先看它啊保存,我们在这儿运行一下发现。粘过来这是什么?哎,谁哪个文件是不是当前模块啊,哎,所以file name是我们当前,哎当前模块的一个完整路径,换句话说,通过这个路径你是能找到这个。
23:17
模块看到了吗?哎,这是我们当前模块的一个完整路径,那这还有一个叫做name director director什么意思,文件夹目录啊,目录在这,我再运行一下走你。跟上边是不是基本一样啊,是不是少了后边这段,哎,后边段,所以这个是什么呢?诶,这是我们当前模块所在文件夹的路径啊,所在文件夹的一个完整路径啊,完整路径好,那所以这个几个属性我们就给它列出来了,注意这几个我们都是可以直接用的,Expose表示的是我们导出对象,导出那个对象要暴露的东西都可以在expose来设置,Require是我们这个函数用来引入内容的啊,引入内容的Mo代表的是我们这个模块啊,模块对行fair name还有direct name,它们都是一个路径,File name是文件的模块的完整路径,Director name是什么呀?是它所在文件夹的一个路径,懂这意思吧?哎,所在文件夹的一个路径啊好,那这一块我们就给它说完了,停一下。
我来说两句