刚刚我们学习了 promise, 解决了回掉地狱的问题,现在我们回过头来看 promise 的这个代码,我们发现 promise 的这个代码看起来非常的臃肿,一点也不简洁,所以接下来我们要做的事情呢,就是去解决 promise 代码臃肿的问题。 我们如何才能解决这个问题呢?我们要去学习一个叫做亦不函数的知识点,通过亦不函数呢,我们就可以去解决 promise 代码臃肿的问题。在当前这个文件夹当中,我们来新建一个文件,这个文件的名字呢就叫做五杠。 在当前这个文件当中呀,我们先来建立一个普通函数,通过方省关键字,我们声明一个函数,函数的名字呢就叫做软。我们怎么样把一个普通的函数变成一部函数呢?我们只需要在方省关键字的前面呢,去加上 a, s, y, n, c, a, sink 这样的一个关键字就可以了,这样的话一个普通的函数就变成亦不函数了。 如果是箭头函数呢?我们怎么样把一个箭头函数改造成亦不函数呢?在这个地方我们使用 cos 的关键字声明一个常亮,这个常亮的名字呢就叫做 fn, 他的指压就是一个箭头函数,我们只需要在箭头函数的前面加上 async, 这样的话,一个箭头函数他就变成了亦不函数了。 好,这就是亦不函数的定义方式。那么亦不函数他有什么样的特点呢?第一个特点呢就是亦不函数的返回值会被自动包裹在 promise 对象当中,我们来验证一下,在 ran 这个方法当中呢,我们通过 rate 关键字啊去返回一个字不串,那么这个字不串呢,我们就让它是 a 就可以了。接下来呢,我们去掉 ran 这样的一个方法, 接下来我们通过 console 的方法去输出 run 方法运行之后的这个返回纸,我们找到命令行工具,在命令行工具当中,我们通过 no 的命令去执行五杠 a sing function 点 g s 这样的一个文件。在控制 当中,我们看到哈在这输出了一个 promise 对象里面包括了一个 a, 也就是说我们在调用完润方法之后呢,我们在后面呢可以去练试调用邓方法,那么通过邓方法的这个毁掉函数呢,就可以去拿到这个 a 了。比如说在这我们写上一个 result, 我们通过 console 的方法去输出这个 result, 在命令行工具当中,我们再次去执行这个文件,看现在我们是不是就拿到这个 a 俩好,这是义不含书的第一个特点,他的反位置会被自动包裹在 promise 这样的一个对象当中。 接下来我们看亦不函数的第二个特点,在亦不函数当中呢,他有一个关键字叫做 out await a way 的这个关键字呢,它可以去暂停亦不函数的执行。当而未的这个关键字后面的这个 api 返回结果之后,我们再向下去执行。在而未的这个关键字的后面呢,我们可以去跟上一个返回 promise 的这样的一个 api, 当这个 miss 返回结果以后啊,那么这个函数呢,再继续向下执行,而且呢我们还可以通过返回值的方式来拿到 cro miss 执行的这样一个结果, 现在我们找到三杠邓点 gs 这样的一个文件,在当前这个文件当中呢,我们把 rit file 这个方法呢拿过来。好,那么在这个地方我们使用可能加微去粘贴这个袋吗? redfile 这个方法,他的返回者是什么呀?是不是一个 promise 对象呀?如果说 redfile 他返回的是一个 promise 对象的话,那么他是不是就可以跟在 over 的这个关键字的后面呢?是可以的,所以我们在这啊,去调用 redfile 这样的一个方法,并且把它放在 away 的这个关键词的后面,在这个地方,我们去读取当前这个文件夹下面的 x 点儿 t x t 这样的一个文件, 在 ov 的关键字的前面呢,我们可以通过 lit 关键字去声明一个变量 x 来接收这个 redfield 这个方法的一个读取结果。在这个地方你要注意了哈,我们这个地方的 x 呢,他就不是一个 promise 对象了啊,他是 promise 对象里面的这个 挽回结果,那么也就说我们在后面不再需要调用邓方法了。接下来呢,我们继续使用相同的方法去读取 y 和 z 这两个文件。好,那么前面呢,我们把这个变量改成 y 和 z。 好,那么现在你看这个代码,我们依然是依次去读取三个文件,但是呢,这个代码看起来是不是就非常的简洁了呀? 如果说我们通过 come back 的方式,那么他呢要写成这样的一个方式,如果我们通过 promise 这个代码呢,要写成这个样子,但是呢,我们通过一本函数代码,是不是写成了这个样子,这个代码本身呢,他得到了一个非常大的简化,看起来呢就非常好维护了。 接下来呢,我们只需要在后面通过返回一个速度把 x 和 y 和 z 都包裹进去就可以了。好,那么接下来呢,我们在调用完润方法之后啊,然后呢去调用邓方法来拿到这样的一个结果,速度保存这个文件啊,然后呢,我们找到这个命令行工具,在命令行工具当中, 我们通过 note 命令去执行当前这个文件,注意看现在我们是不是就得到了这三个文件当中所包裹的内容量,那么 现在这个代码就看起来非常的简洁了哈,那么刚刚我们说哦,为的这个关键字呢,他可以去暂停亦不函数的执行,这样会不会阻塞县城呢?实际上不会的哈,这个亦不函数呢,他是属于亦不 api, 他 并不会在主县城当中去执行,他会在 c 家家维护的那个县城当中进行执行,所以呢,他不会去主色主县城是没有问题的。 接下来呢,我们看一下亦不函数的其他特点哈,关于这个 ov 的关键字呢,他只能出现在亦不函数当中,他不能在全局的这个环境当中去使用。好,那么这是我们需要知道的一点。好,那么这就是亦不函数的一个基础使用方法。
粉丝1745获赞4943
import 和 require 的区别? import 是 es 六规范语法,而 require 是 amd 规范引入方式。第二, import 引入了对象被修改时,原对象也会被修改,相当于前拷贝。而 require 引入的对象被修改时,原对象不会被修改。官网称 直拷贝,我们可以理解为生拷贝。第三, input 在编辑时被加载,所以放在文件开头。 require 是在代码运行时被加载,所以理论上可以放在代码的任何地方。第四,在 note g s 中 不能直接使用 input 来导入,必须使用 biber 才能使用,实际上也是将 e s 六转为 e s 五再执行,你学会了吗?
今天给大家分享一下这个 require 和 input 的一个区别,这里呢是我总结的三点,我们先看第一点,首先啊啊,第一个是 require 呢是空门 gsa 规范, input 呢是 es 六的一个规范 啊,什么意思啊?就比如说我这里啊定义了两个,两个文件夹分别是硬碰到水块,我们先看一下这个水块,我这里呢定义了一个炕的和一个炕的加加的一个方法。 首先啊,这个锐块它的导出方式不同,当我们在弄的 gs 里面,我们去定义,我们在这个,比如我们门里面去锐块一个 gs 的时候,它的导出方式呢是通过某六点一个 spose 进行导出的。 然后呢我们看一下我们的这个 n p o, 我们饮用的饮用的是通过饮泡的法母来进行一个饮用。同时呢我们来看一下我们运行时的一个差异, 当我们运营锐块的时候,我们将它将我们的 a 点 gs 引进来,我们运行这些运行这些代码,我们执行一下, 此时我们可以看到啊,我们 aa 加价没有返回值啊,这个没有问题,我们看着呢等于一这, 这个时候我们实现了一个正常的打印,但是我们运行一下我们这个引炮的, 我们可以看到控制台进行了报错,他说不能使用,不能使用外部声明的这个 model 什么意思呢?就是说在我们 no 的 no 的里面没有办法直接去使用,直接去使用 input, 反而我们去这样引用, 我们需要做一些改变啊,我们改变什么呢?首先我们可以这样写,因为我们这里引用的是 a 点 gs 们,我们不让他后,这名是点 gs 了,我们就让他点 mgsm, 点呢 gs 呢?我们 我们也要改一下,改成 m 点 ts, 这个时候我们就可以正常的运行了啊,我们看他这里还报了个错,因为我们的后缀名不对啊,我们改一下, 这里呢,我们可以看到他运行了啊,当我们改完这个后缀之后正正常运行了,这就是他们俩最基本的一个区别,就是他们的导出方式与使用方式, 就是导出和引用的方式不同,也就是我们的第一点,他们的规范不同,他那么使用方式也不同。同时呢我们也可以看到控制台的一个输出, 当我们执行 amp 的倒进来的知识,我们执行了 a 加加,当我们输出抗斗的时候,我们控制台输出什么? 是不是输出?二,但是我们这边定义的几是不是定义的一,也就是说我们硬泡的倒进来的值,当我们执行 a 的方法的时候,这里面的这里面的这个长量进行了改变,但是我们蕊块呢,我们同样定型了个一, 我们这里呢也是进行了一个打印,一个加加,但是我们这个支我们可以看到空台的输出他是一,他没有任何的改变,这就是他们俩的另外一个区别, 什么区别呢?就是蕊块引进来的,引进来的数据属于值得拷贝,什么意思呢?就是说当我们去给这个对象 进行复职的时候,我们给某就这一个的 pose 复制一个对象,将他蕊块引进来的时候,相当于进行了一个拷贝,也就是说在我们当前函数里面做了一个缓存,我们这里面除非你钓鱼那个方法,然后返回来的,那是没有问题的,但是你如果说你去改这里面的值的话 是行不通的,因为它存在一个缓存的问题,但是我们引抛的呢,我们发现它的值正常改变了,这就说明呢,我们引抛的的值是属于值的引用, 也就是说我们 a 里面定义的这个炕的在我们命点里面啊,我们钓鱼方法可以对他进行改变,同时如果说我们这里面有一个命点啊,二点 mgs, 我们可以复制一下, 如果说这里面我们有有一个二, 此时我们打印这个坑,大家觉得会输出几呢?我们运行一下, 我们可以看到他输出的是一, 也就是说当我们执行完一,他等于二,这当我们在执行二的时候,我们发现这个炕头还是一, 也就是说也就是说我们的 apple 的虽然说我们可以改变它的值属于 值得引用啊,我们把这个值给改掉了,但是呢它属于它属于是一个独立的模块,我们每倒进来一次,它就生成了一个独立的模块,包括我们零点二里面也一样,当我们倒进来的时候,它这里面它又是一个独立的模块, 这个模块里面的内容呢?这个模块里面的内容可以通过我们的方法进行任意的改变, 这其实对我们的开发有非常大的帮助。这也是为什么不管我们使用 voa rex 的里面,现在几乎几乎包括我们的 note 也几乎全部都是使用 es 六的形式了, 因为它的好处实在太大了,比如说当我们这里面定一些常量的时候,我们不需要在方法里面定一些面料,我们需要在外面定一些面料,此时我们可以随便的改变它。但 但是我们当第二次引用,当我们有第二个地方引用它的时候,直不会受到影响,相当于一个又被出出屎化了。 但是我们蕊块呢?我们根本无法改变这个值,因为它存在一个缓存的问题,因为它属于值得,值得拷贝,这个呢属于值得引用,虽然说他们两个都会形成独立的模块,但是他不能改值,这个问题就很麻烦, 也就是说我们这个纸只能写在哪,只能写在这个方法里面进行一个改变,然后把它给返回出来,这是他们俩的一个很大的一个区别。
大家好,我是刘嘉译。这节课我们讲一下微信云开发,我们可以看一下这个小程,微信的官方文,微信小程序的官方文档,嗯,里边介绍说微信云开发是这个啊,腾讯推出的专业的小程序的开发服务, 就是我们做一个小程序,嗯,他不能光有这个小程序的前端,还需要有后端服务。 那么微信云开发就是啊小程序的后端的一个服务,那实际上我们不用微信云开发,自己也可以做嗯小程序的 后端服务,但是呢我们自己做后端服务的话很麻烦,因为嗯小程序的后端服务 就是小程序的后端服务,你必须要配置域名,而且这个域名还必须是 https 的,就是你必须得有这个 htps 的证书,并且你这个域名还要备案。然后你你还需要管理这个啊服务器的运维一些工作。但是如果你使用这个微信云开发的话,嗯,所有这些 问题你都不需要自己去考虑了,你只需要啊专注于这个后端的业务逻辑去开发就可以了。 而且这个后微信开发的这个环后端环境是 note gs, 后端的开发语言就用 note gs 就可以。然后他的嗯数据库就是类似于 model db 那种属于嗯非关系型的,就是接森类的数据库。然后我们上节课,嗯,学习了,嗯,用 voe 开发微信小程序的,嗯,框架叫用力 app, 这样的话 我们嗯前后端都统一了,开发语言就都用啊 gs 就可以了。下面我们就创建一个微信云开发的一个项目,首先我们嗯 可以看一下这个文档,首先我们创建这个,嗯,微信云开发需要的准备工作有两项,第一项就是你下载并安装微信开发者工具,同时开发小程序 都需要先去注册一个小程序的账号,每一个小程序账号都对应有一个小程序的 i id, 然后现在我们就创建项目,首先我们打开微信开发者工具, 然后我们创建一个小程序的项目,这个项目名我们就叫 demo cloud, 然后我们选择这个创建项目的目录,我们就把它放在地盘和 projax, 然后这有一个微差的, 嗯,放在这个目录下面,再建一个 dem cloud, 我们创建在这个目录下,然后这个 ipad 就是填写我们这个创 的小程序账号所对应的 ipad, 然后这里后端服务我们要选择微信云开发, 然后我们在这里选一个嗯,云开发的基础模板,然后点击确定好,现在我们就创建好了一个 啊微信云开发的一个项目,这个项目看到这个项目叫呆萌可唠的,它里面包含 嗯两个部分,一个是 cloud 方身斯,这个目录就是嗯,相当于这个项目的后端服务,也就是在这里就是我们的嗯,微信云开发的服务,然后这个目录 mini pro 就是,嗯,我们这个项目的前端就是小程序端,然后我们在这个创建了啊云开发服务的项目,以后在这里可以看到有一个云开发的这个按钮, 我们点击他就会打开这个云开发的控制台,在这个控制台里我们可以管理后端的环境,就是云开发的环境,每一个账号可以创建两个免费的环境, 我们可以嗯,点设置,在这里可以管理我们的环境,然后我们开可以看一下这个盖栏,就是一个云开发的环境,里面他有云函数,这个云函数就是我们嗯,相当于我们的 后端的运行,后端运行的代码,然后这个还有数据库,还有存储文件,存储,这个是数据库,然后存储云函数, 然后我们可以看一下这个,嗯,看一下这个项目,这个项目我们,嗯先看一下这个项目干部路下有一个 project 点肯定有点节省,这里面,嗯,这个配置文件里面 啊有一个字段叫可唠的方式,入的这个字段的值就指定了你这个嗯云函数所在的目录就叫可唠的方式,就指定了这个。如果你这个目录名不叫可唠的方式,你这地方就是需要改一下, 就要和这个对应。然后嗯,左侧这个模拟啊,模拟器的页面就是这个小程序所展示的效果。然后我们主要看这个 cloud functions, 这个 cloud functions 里边有一个目录叫 quick start 的 functions, 这个就是啊一个云函数,这个云函数就叫 quex star 的方式,我们可以在这个嗯云函数在控制台里面看到,我们现在这个项目有一个云函数,这个云函数的名叫 quex star 的方式, 然后他的运行环境就是 no 的 gs。 然后我们在嗯小程序里,我们看一下 appg s 入口文件,小程序的入口文件里面, 嗯,用这个啊 wx, 就是微信点可唠的点隐匿,他去出石化这个云开发的调用。然后我们嗯可以看一下,比如说看这个盖头和 id, 这个应该就是对应的这个获取 oppo id 这个页面,我们看到点嗯,点,当我点这个获取 oppo id 这按钮的时候,他会,他就是调用了这个云函数, 通过这个微信点 cloud 点靠方审,然后参数有一个内幕资段,这个内幕资段就指定了你这个原函数的名,他就调用了这个库克斯达的方审,嗯,剩下的就是都是参数,肯费一个得塔,得塔,嗯,里边穿的是太, 就是盖头喷 id, 然后我们可以看一下嗯,这个云函数里面对应的这个还处理他的代码,我们返回了就是欧喷 id、 ipad id 和 unionid, 然后 我们在这个啊小程序端是获取了他的这个 oppo id, 然后点击以后我们就获取到了嗯 oppo id, 这样我们做一个嗯小程序的项目, 我们就可以利用这个云开发去作为这个项目的后端服务,我们可以让这个函数返回,嗯,返回一个一,然后我们把这个修改在 嗯部署到这个云端,我们点,我们在这个嗯云函数的目录上点右键,然后上传并部署到云端,我们可以看一下控制台,刷新一下 他现在显示更新中,我们再嗯稍等一下,好,现在我们再刷新一下,显示已部署,就是我们修改的代码已经部署到线上了, 然后我们再重新的获取这个 oppo id, 我们看到他返回的就是一,但是当我们就是我们在开发的时候,如果每次嗯修改代码都需要部署到线上才能看到效果,这样很麻烦, 所以我们可以就是在本地运行,在本地运行的话,就是我们在这个云函数的目录上 点右键,然后开启云函数本地调试,然后他会提示你,嗯,安装 no 的猫丢死,然后点确定,然后我们稍等一会,这样就是我们本地的环境已经启动了,这个时候我再修改,比如说改成二二二,这个时候我调用的就是本地的环境,我在, 我,我修改为二二二以后,我并没有,嗯,把这个代码上传到这个线上, 我就可以,嗯,看到效果了,这就是微信云开发,我们嗯,就是做一个基本的介绍,具体的 api 我们可以在这个云开发的这个文档里面去查。微信云开发的一个大致的流程就是这样。
人人都能做前端导入导出,有时候开发需要把复杂的功能划分为一个一个单独的模块, 不同模块之间是独立的。每个模块开发完成后,再把不同模块中与开发需求相关的部分组装起来,最后形成完整的功能。这种开发方式叫模块化开发。 用最简单的例子演示一下,新建一个 g s 文件,把这个 g s 文件作为一个模块, 在 g s 文件中定义一个 id 的函数,用 expod 语句导出这个函数。花括号里是要导出的函数对象、原始值等 可以导出一个或多个,多个的话用英文逗号格开。把刚才定义的 i 的函数加在花括号里。 在主文件里可以用 input 把 i 的函数导入进来。使用 input 语句需要把 skript 标签的 type 属性设置为 model。 input 后面的划括号里的内容是要导入的函数、对象等,这些内容都是根据模块里导出的内容选择的。这里导入的是模块里的 i 的函数。 form 后面表示的是从哪个模块里导入的,这里是刚才定义的模块文件, 点加斜杠表示相对于当前目录。导入以后就可以调用 i 的方法,把 i 的方法处理后的值传到 c, 把 c 显示在 diy e 中保存,运行 一下, 显示一加六的结果是七, 再替换一下实际参数,把六换成七,再次保存,刷新 计算,结果变成了八,计算的是相当准确。
接下来我要讲解的内容叫做 model wiper function, 就是模块包装函数。在讲解模块包装函数之前呢,我们要先来看两个问题。第一个问题啊,是 note gs 是如何实现模块的,为什么我们在模块文件内部定义的这个变量在模块文件外部是访问不到的呢? 第二个问题啊,是每一个模块文件当中都会有他自己的猫丢对象和瑞克方法,他们是从哪来的呢?很显然,这两个问题的答案呢,就隐藏在了猫丢外边方式当中,所以接下来我们就开始去讲解它。 实际上在每一个模块文件执行之前呢,我们在模块文件内部所编写的代码呀,都会被包裹在一个函数当中,这个函数呢,就叫做模块包装函数,这个函数就长成了图片当中所展示的这个样子。 好,那么由于在扎巴斯科普当中呀,这个函数呢,他是拥有自己的作用欲的,我们是不能够在函数的外面去访问函数内部所 创建的这个变量的。正是因为这样的一个原因呢,每一个模块文件它里面的这个代码呢,就都拥有了自己的作用欲,所以呢,我们在模块文件的外部就不能够去访问模块内部的成员了。好,现在啊,第一个问题我们就解决到了, no 的 js 是如何实现模块的,他是通过模块包装函数来去实现的。接下来我们继续向后看,已去解决第二个问题, 这个模块包装函数呢,实际上是有些参数的,在这个参数列表当中,我们看到了瑞会尔和猫斗。好,那么现在我们就知道瑞会尔方法和猫斗对象是从哪来的了,实际上呢,他就是通过模块包装函数给我们传递进来的。 在模块包装函数的参数列表当中呢,他实际上还有一些其他的内容,比如说像下不见下不见 fail name 和下不见下不见 d l 内幕,从他们的名字当中我们就可以看出他们的含义是什么。下不见下不见 fail 内幕呀,就是当前这个模块他的一个文件名字,当然了,这个文件名字呢,他是包含完整路径的。下 下片 dr 内幕呢,它里面所包含的呀,就是当前这个模块文件所在的一个路径。接下来呢,我们就切换到编辑器当中来验证这一点。 首先我们找到 log 点 gs 这个文件,在这个文件当中呢,我们使用 console 的方法去输出下不见下不见 file name, 那么我们是可以直接输出他的啊,因为他就是模块包装函数的参数。好,那么接下来呢,我们再使用 console 方法输出下不见下不见 dir name, 保存这个文件。接下来我们找到这个命令行工具, 在命令行工具当中呢,我们通过 no 的命令去执行 log 点 j s 这样的一个文件。在控制台当中,我们看到了说出结果。第一个呀是 fail name, 我们看到它就是 log 点 j s, 那么在这个地方呢,他的这个文件名字实际上是带完整路径的。好,接下来我们看下片下片 d r 内幕,下片下片 d r 内幕呢,他指的就是当前这个某块文件所在的路径。在这个地方我们看到啊,当前这个某块文件呢,他就是被存储在扣的这个文件夹当中呢,所以 他把扣的这个文件夹所对应的完整路径说出来了。好,那么现在呢,我们就知道下不见下不见 fl 和下不见下不见 d r 内幕,它的含义是什么了?接下来我们继续看这个魔法包装函数的参数列表, 在这个参数列表当中呢,他实际上还有一个 exports expose 这个参数,他实际上是一个对象,这个对象呢,和猫斗点儿 expose 对象是同一个对象,因为在 xpos 这个参数当中,它保存的就是猫斗点儿 expose 这个对象的营地址。 也就是说,我们除了可以通过 model their expos 进行模块成员导出以外啊,我们也可以通过 expose 这个对象进行导出,比如说我们看下面这些代码,以前呢,我们是通过 model their expose, there and point 进行导出的。哈,那现在呢,你可以直接简写成 expose, there and point 了。好,接下来呢,我们就切换到编辑器当中来验证这一点。 在 log 点 gs 这个文件当中呢,我们把 model dare expose 简写成 expose。 好,那么在这个地方,我们通过 expose 对象导出了 on point, 以及 接下来我们在 index star g s 这个文件当中呢,输出 export 对象,以及啊,我们在 logo 里面去找到安 point。 好,那么接下来呢,我们通过 no 的命令去执行 index d s 这样的一个命令。 在控制台当中呢,我们看到了 xpos 这个对象的输出,我们看到了这个 e y l 的输出。好,那么这就证明了我们通过这样的一个方式也是可以进行模块成员导出的, 但是呢,在使用 xpos 的时候呀,有一个点需要去注意,我们在通过 req 二方法进行模块导入的时候呀,我们最终导入的实际上还是猫都点 expose 对象。所以呢,在使用 xpose 对象去添加模块成员的时候呀,你是绝对不能够去修改它里面的这个营地址的, 也就说我们下面这个写法是错的,我们把 log 直接复制给了 xpose, 那这样的话是不是就改变了 xpose 它里面的这个应用地址呀?那么我们在导入的时候用的实际上不是 xpose 它的应用地址哈,实际上是 model 点 xpose 应用地址锁定的那个对象。接下来呢,我们就切换到编辑器当中来证明这一点。 现在呢,我们把这个代码呀给他主持掉,接下来呢,我们给 xpos 进行复制,给他重新复制给另外一个对象。在这个对象当中呢,我们去添加 and point, 他的值呢,就是 url, 我们再去添加 log, 他的值呢,就是上面的那个 log。 方法好, 现在我们保存这个文件哈,保存完这个文件之后呢,我们来到这个命令行工具当中,通过 no 的命令去执行 index 这样子这样的一个文件哈,你注意看现在输出的这个 expos 对象,他是不是一个空对象呀?因为这个对象他实际上是 model their exposed 对象。好,那么在这个对象当中找不到 an appoint, 所以呢,就输出了安迪范的好, 那么现在我们就知道了, xbox 实际上是猫头点 xbox 的一个简写形式,它里面保存的是猫头点 xboss 这个对象的引用地址在进行模块导入的时候呀?实际上我们使用的是 model 点 xboss, 它里面保存的这个引用地址所定的对象,所以在模块成员进行导出的时候呢,你不能够去修改 xboss 这个对象他的引用地址,那么如果你去修改,那就是一个凑的写法。
通过这样 import 的语句会在当前的命名空间中创建一个模块的引用,你可以使用模块名点的形式来访问该模块定义的方法或者属性。另一种方式就是通过 from 模块名来导入该模块的相关的方法和属性。信号代表导入所有, 这样可以直接使用相关的方法名称,因为他们已经被创建在了当前的命名空间里面了。 不过这样的操作会有个问题,那就是会让命名空间变得很混乱。比如我们创建一个模块 a, 在里面定义了一个和 request 相同的方法名称,也叫做 get, 我们将其导入,可以看到这时候执行的是模块 a 中的 get 方法,而不是 request 里面的这个 get 方法。所以最好不要使用 from 模块名 imports 信号的方式。如果你明确的知道使用模块中的几个方法,可以像这样明确的去导入。而对于需要用到这个模块的比较多的方法,那就直接使用 inpport 加上模块名就好了。如果你想让代码更具有可读性,那么就可以使用 as 来重命名,像这样。
同时呢,我们可以看到第二点,锐块是同步执行,硬碰的呢,是义不执行,这句话是什么意思呢?呃, 举一个最简单力的,因为我们现在用的都是本地的文件,没有办法看出来一个特别明显的区别。如果说我们引用的是一些比较大的文件,或者说外部的文件的话, 我们可以发现,当我们这里面有两个锐块的时候,如果第一个锐块没有执行结束,那么我们后面的代码根本就不会执行,也就或者说他会产生一个阻塞, 那这样的话,如果说第一个第一条引用他的执行时间太长,那我们后面代码是不是就没办法执行了?这是他的一个非常大的一个缺陷 啊。同时呢,我们引抛的他就解决了这个问题,我们这里面不管引用多少,哪怕我们第一个加载十分钟,那么第二个呢?他加载一分钟,那我们谁先加载完就先执行谁, 这就是他的一个异步的一个好处,我们的代码就不会产生一个阻塞的问题,我们后面的同步代码呢,可以正常的去执行, 这是这是他们俩第二点的一个区别。还有第三点,蕊块是运行时编 n plus 呢,是编译阶段执行,在代码运行之前,这句话什么意思啊?可能直接去理解什么是运行是编译,什么是编译阶段执行啊?可能啊,不好理解,我们通过代码直接就给大家演示一下,比如 不说,比如说我们这里面我们把这句话给删掉,这里面我们引用了 ajs, 此时我们把它给调整一下位置,我们把它调到这里来,调到这里来去调这个 a 方法 通过我们我们运行一下,我们运行一下, 我们可以看到有一个错误提示,他说呢我们不能使用 a, 在出手法之前 我们不能使用 a 方法,在出手法之前,也就是说我们第二用 a 的方法的时候,他还没有存在, 他还没有存在,当我们执行到尾块的时候,他才去执行一个加载, 这就是运行时编影。然后呢我们再看一下我们的 ampo 的,同样的我们也调整一下输出位置, 此时我们再运行一下,我们发现控制台可以正常的输出,没有报错, 没有报错啊,我们运行的不对啊,我们运行的应该是 mean yeah, 我们可以看到我们没有报错,我们 a 的返回安底办呢,说明我没有返回之没有问题, 那这是为什么呢?这就是我们说的编译阶段执行,当我们的 gs 去执行一段代 码的时候,当我们集结一次啊,执行代码的时候,他首先会有一个编译的操作, 他会将我们引入的这个这个内容呢提升到我们的前面来,所以呢他就不会出现我们在瑞会 gs 里面出现的错误, 这也是为什么我们这个蕊块啊,蕊块为什么用的越来越少了,我们的眼喷子呢用的越来越多,因为通过我们这个对比,我们可以发现 这个蕊块啊跟引抛的比起来,他的弊端实在太多了,比如说从第一点来说,第一点来说他的这个使用方式上来看,他就没有我们这个这个蕊块,就没有这个引抛的使用起来方便。 并且呢我们发现他们形成独立模块的时候,我们 a 里面的纸在闷的里面呢,我们可以随便的去改变它,在二里面呢却不受影响,这就形成了一个独立的模块,我们蕊块呢,我们根本无法改变这个纸。 这是呢,我们遇到的第一个问题啊。第二个问题呢,这块是同步执行引风的呢,是异步执行,那我们写代码,我们肯定知道异步执行肯定是比较好的,同步执行呢,他会造成阻塞的问题,异步执行呢,他就没有这个问题,相对来说我们代码执行的更顺畅,加载的更快。 第三个呢,这块是运行时的编语,就是我们没有办法,没有办法在没有引用之前就要用我们想要引用里面的方法,而我们的引抛的 他就可以,他就可以调用啊,因为他是编音阶段执行的,他呢就类似于我们变量提升那样一种形式,当我们代码去运行的时候呢,我们发现啊,他在编音阶段已经找到我们引进来的一个值了,那么我们就算, 就算在他之前,在他之前使用我们的这个 a 的方法也是没有问题的,这就是 apple 的相对于愉快的一些区别,以及以及他的好处。并且啊,这个 apple 的现在已经被浏览器支持了, 也就是说我们可以在浏览器中,我们通过这个 apple 的直接去下载一些链接,直接去引用一个 macd 的链接,这是一块呢,也在 apple 的逐渐强大的过程中呢,也显得他的缺陷啊越来越大了。 所以说我们在开发的过程中呢啊,一定要弄明白,为什么我们项目中全部基本上都是引抛的了,基本上不使用这个水块了,还为什么我们要弄明白为什么原因。 另外啊我们再看一下我们刚才是不是通过 a 点 m 点 gs 去,以及我们 m 点 mgs 去进行的,我们也是报道引爆的这样的一个 ds 六模块,那我们除了改文件名之后还有什么方式呢?我们啊先把这个文件名给它恢复一下, 他呢是 a 点结死,这个呢是命点结死。 然后呢我们来执行一个方法,叫 npm 引力的岗位,也就是说执行这个代码呢,也 就是说可以在我们这个目录呀收藏一下拍个点的阶层,然后我们看一下这个拍个点的阶层里面有什么。第一个是我们文件名的内幕,一个是版本啊,以及描述,以及我们的主文件是哪个文件,然后呢我们加一个东西, 你看这里面我打冒好之后啊,它里面就可以出现很多东西,我们加一个太补,太补党,我们就选成 model, 刚才呢我们也可以看到看到那个提示啊,太不可以选空门 gs 的,空门 gs 呢就是执行我们这个铝块呢,这个木六呢就是执行我们严四六的,这个时候呢,我们把这个改上之后啊,我们再运行一下, 我们发现可以正常运行啊,也就是说 我们可以不改文件名的后缀,我们可以自己去引进的一个排位点阶层去改一下这个态度,这个 no 的就可以识别我们是用的哪个模块了,他默认呢就是如果没有这个排位点单身呢,他默认呢就是空门 gs, 他会导致我们最初的, 最初的直接运行我们这个一个 po 的,以及我们这个啊硬炮的倒进来的时候,他会运行不成功。 嗯,说这个呢,主要就是告诉大家啊,我们除了可以改不念名之外,还可以生成一个拍点阶段啊,这是解决我们在弄的里面执行 ac 模块的一个办法。嗯,今天的分享呢,大概就是这些。
后面的练习会用到一些拍森模块和包,所以这里先介绍一下拍森模块的导入功能。拍森模块其实就是一些函数和类的集合文件,它能实现一些相应的功能。 拍森包其实就是一些模块的集合,拍森包提供了一系列功能相关的模块,当我们需要使用这些功能的时候,直接把相应的模块和包导入到我们的程序中,我们就可以直接使用了。拍森之所以这么流行,一个重要原因就是拍森有大量的好用的模块和包供大家使用。导入拍森模块和包 需要用到 n po 的关键字, n po 的关键字的基本语法如下,其中猫九就是导入的模块的名称。图中是导入数学模块的例子, 可以看出需要在使用之前用 npo 的关键字导入模块,模块导住之后会自动生成一个与模块同名的对象,这个对象包含了模块中所有的函数、变量和类信息,使用时我们可以直接调用对象内部的函数或变量。 图中是导入图像包中的一个模块的例子,方法与基本语法非常相似,只是多了一个点用来表示包中的模块。
接下来我要讲解的内容是毁掉函数传递参数,在主函数当中调用毁掉函数的时候呀,我们可以为这个毁掉函数传递参数, 这在一步变成当中呢,是非常有用的。现在我们来看一段代码,在 b 函数当中,我们调用 cobe 这个回调函数,在调用这个回调函数的时候呢,我们传递了一个字母串参数,那么在调用这个 cobe 的时候呀,实际上就是在调用这个 a 函数,那么这个参数呢,实际上就传递给了这个 a 函数,那么在 a 函数当中我们就可以拿到这个参数了, 接下来我们就看一下他在一步编程当中的应用是怎么样的。现在呢,我们就切换到编辑器当中,在这个文件夹当中,我们来新建一个文件,这个文件的名字啊,我们就把它叫做一点 cobe 点 js。 在当前这个文件当中,我们去定义一个 b 函数,那么在这个 b 函数当中呢,我们要去执行一个 e 步操作,我们的问题是当这个 e 步操作有结果 之后,我们怎么样才能把这个一步操作的结果传递到这个函数的外面?好,那么在这个函数当中的一步操作呢,我们就使用延时定时器来模拟,比如说呀,在两秒钟之后呢,我的一步操作就会有一个结果了,那么实际上这个结果呢,就是一个对象。好,那么我们怎么样把这个对象传递到这个函数的外面呢? 我们能够通过返回值的方式去传递吗?实际上是不可以的,因为函数直行完的那一个瞬间,那么这个返回值就有了啊,那么我们在两秒钟之后再进行返回的话,实际上已经不赶趟了,那这个时候呢,我们就可以利用回掉函数的方式,把这个一步操作的结果传递到函数外面去。好, 接下来呢,我们在下面去调用这个 b 函数,在调用 b 函数的时候呢,我们去给他传递一个参数,而这个参数的类型呢,他就是一个函数。好,那么现在我们再调用 b 函数啊,我们给这个 b 函数传递了一个参数,参数的类型是函数, 那么在定义必函数的时候呢,我们在这个地方有一个行餐要与之对应,这个行餐的名字呢,我们就把它叫做 cobec, 那么接下来呢,我们就可以在这个地方去调用 cobec 这样的一个方法了,接下来我们在这啊,给他传递一个一步操作的结果,比如说我们在这就写上一个 test, 为 test, 我们在调用 cobe 呀,实际上就是在调用这个函数,那么在这呢,是不是有一个参数我们要与之对应呀?实际上这个参数蕊造的呢,就是个对象了,那么在这个地方,我们可以通过 ctrl 倒了方式啊,输出这个蕊造的,这样的话,我们就把 b 函数内部的这个一步操作的结果,通过回到函数的方式传递到了函数的外面。 那么如果说我这样去写代码,你看着不太习惯的话,我们也可以去更改呀,比如说我们在这啊,去把这个函数粘贴到这,然后给这个函数去起一个名字,然后我们把这个 a 呢传递给这个 b。 好,那么这样的话,是不是就把他的结果给到这个函数了呀,保存这个文件哈, 接下来呢,我们找到这个命令行工具,在命令行工具当中,我们通过 no 的命令去执行一杠 col back 点 gs 这样的一个文件,那么现在我们等待两秒钟在控制台当中呢,说出了这个对象哈,就说明当前我们所写的这个代码呀,是没有问题的。 接下来呢,我们看一下在 no 的 gs 这个代码运行环境当中,他是怎么样通过回到函数来拿到一步操作的结果的。 刘爽在这个地方呢,他通过 require 方法去引收了 fs 这样的一个模块,通过 fsdr redfile 这样的一个方法去读取一个文件当中的内容, 那么当这个内容读取完成之后呢,他是不是通过回到函数的方式来拿到这样的一个结果呀?那么注意哈, read fell 这样的一个方法呢,它是一个 ebapi 啊,那么 cpu 在发出读取文件的这样的一个指令之后呢,他会去继续执行其他的代码啊,他不会去等待 当这个读取文件的这个操作执行完成之后呀, cpu 呢,会去调用这个回调按数来拿这个一步操作的结果。好,那么这就是 no 的 gs 当中,他通过回到 函数来拿一步操作结果的这样一个方式。现在我们切换到这个编辑器当中哈,我们把这个代码呢感受一下,我们先把这个代码呢给他注视掉。 接下来呢,我们在这个地方使用杠丝关键字去生命一个长量 fs, 他的值呢就是瑞会尔 fs。 接下来我们去调用 fs 点 redfile 这样的一个方法去读取文件, 这个方法当中的第一个参数呢,就是你要读取的那个文件的路径。好,那么我们要去读取哪一个文件呢?哎,我们去新建一个文件,这个文件的名字呢,我们就把它叫做一点 test, 那么里面的内容呢,就是一点 txt 保存这个文件。接下来呢,我们在这去传入当前这个文件夹下面的一点 txt 这样的一个文件, 这个方法他的第二个参数啊,是文件的编码类型,那么在这个地方我们写上 u t f 杠八。好,那么由于他是一个 e 不操作,那么他 e 不操作呢,要通过回到函数的方式来拿结果,所以呢,我们在这给他去传递一个 毁掉函数,当这个操作执行完成之后呢, cpu 会去调用这样的一个毁掉函数,那么在调用这个毁掉函数的时候呢,他会把这个一步操作的结果啊给我传递过来。那么第一个参数呢是 l 啊,第二个参数是 result。 好, 接下来呢,我们就可以在这个地方通过 console darlotte 这样的一个方法去输出这个瑞造的啊,我们看一下能否通过回调函数的方式来拿到一步操作的这样的一个结果。在控制台当中,我们去执行 note 一刚 come back ds 这样的一个指令哈,好,那么现在在控制台当中输出了一点 txt 啊,就说明当前我们所写的这个代码是没有问题的。
哈喽,大家好,今天跟大家分享 vv 工程化的 oti important, 我先把五和六的顺序给调换了一下,因为先导入的话,之后 svgico 可以直接引入啊,还有一个的值得注意的时候,就是那个 pritty 的时候,之前忘记跟大家说明 要增加 end of line, 不然的话 windows 和 mac 的话它不兼容,只要要加上这个属性的话,大家就兼容好。我们回到了 oti input in 的, 嗯,我们用到这两个库,一个是 unplugging out to important, 这里面的话为他可以直接去加载,我们直接导入我们的音,直接 important。 第二个的时候是引路 unplugging voe components, 这里面的话可以自动加入主键啊,我们看一下先安装啊,安装这两个 库,修改位特的时候,我们把这两个导入进来的时候,最终在一个 party 里面把这两个加上来。第三的话当加完的时候会自动生成一个 esling to auto 引波灯的点接审,这里面会有大量的配置, 生成完的时候我们需要点 esling 的 r c 里面去配置我们想要的,在 extend 里面配置我们想要的。 我们先看看我们代码,这是我们已经好了,我们运行一下,现在我们需要修改一下我们的代码,第一次的话这个工程里面东西已经 已经加载进来了,因为我们这里面组件我们可以自动导入啊,我们可以不需要这个了,这个工已经得到了,调的时候我们直接取好,可以看到这个工程上我直接可以引入我的 a 了,这显示我的 a。 好,我们先看我们工程 这里面是在这组件上,我们看我们效果啊,这里面显示出我们的组件下面的这个已经达到了,其这就挺完美的。这个思想的话也一开始来源于之前用 unapp, 他的组件可以不用导入,好的时候就是找到这个组件。