00:00
哈喽,大家好,这个小节呢,我们来介绍一下生成器。那么生成器是什么呢?哎,生成器啊,它本身是一个函数。而这个生成器函数呢,是ES6提供的一种异步的编程解决方案啊,语法呢,与传统函数呢完全不同。那么首先的话,咱们先说一下啊,这个生成器啊。啊,其实就是一个函数。特殊的函数。这个函数有什么作用呢?它用来进行这个异步编程。那么义务编程咱们之前是怎么办的呢?咱们之前是用的是纯回调函数。啊,实际上是纯回到函数,就是比方说大家接触过这个这个FS,就是note里边这个FS模块啊还有呢ajas,再比如说数据库的一些操作。啊,那么他们都是异步的。
01:00
啊都是异步的,而对于这些异步操作来说,我们用的方式都是回调函数,哎,一层套一层,一层套一层,这样的方式啊,形成了回调地域。啊,这个的形式,咱们下一个小节,下一个小节会演示回到地域啊。而生成器呢?它其实就是对异步编程的一种新的解决方案,它为什么能够解决这个问题呢?你先别着急,咱们首先先来认识一下生成器函数。生成器函数啊,它的生命方式跟我们原来呢,这个函数声明不太一样。它呢,在function和函数名的中间需要补一个星号。这个星号的位置啊,没有要求是吧,你可以偏左,你也可以呢,偏右。啊,可以偏右啊,你也可以呢,在中间都行啊,都可以,只要你中间有这个星号就可以。然后呢,这是一点特殊的,第二点呢,就是它的一个执行比较特殊。
02:05
啊,等于一个G。它的返回结果啊,不像咱们原来,哎呀直接写完代码立即输出,比如说我这写一个cons log是吧,啊hello。Hello hello,然后呢?保存,我们一起来看看这个结果啊,Cons log,然后打印一下。保存切过来,大家看一下这个结果呢。你先看这它首先第一个啊,他没有输出这个位置。这行代码的这个输出结果并没有出现。然后呢,下边它的一个返回结果,再看一下它其实是是一个什么呀,是一个迭代器对象里边有一个next的方法。啊,它是一个迭对项,可以调这个ne方法好了,那么那么它这样不能调,我怎么让里边代码运行呢?嘿,我们可以呢,借助于这个对象里边的next方法来让它运行保存。
03:04
Hello generator。这就是咱们生成器函数的一个特殊性啊,声明上边特殊,执行上边也比较特殊,你直接调它还不能走,必须呢,得调next方法才会执行。好了,那么除了这个特殊以外呢,还有一点特殊就是在生成器函数可以出现业务的语句。什么意思呢?哎,看一下演示一下ill的。后边呢,跟一个表达式,或者说跟一个自变量,比如说一只没有耳朵。耳朵。我再写一个I的一只。啊,没有尾巴。可以再写一个E的,真奇怪。好好了,我们把这个呢,保存一下,刷新看一下啊,还是一样子啊,我们读了三个ill的语句,那么这个I的语句呢,它是干嘛的呢?我们可以认为ill的算作是函数代码的分割符。
04:11
啊,函数代码的一个分割符,它呢,把函数代码呢,切分成几块。啊,切分成几块,你可以看一下,哎,这是一块,这个要的和这个要的是一块,这个要的和这个要的是一块,然后呢,要的到结束是一块,那三个分割符产生四块代码,那么怎么去执行呢?由NEX的方法来执行。看一下我这呢,输出一个111把它复制一份放到这儿。来一个222。再来一个哟,把它复制拿过来,333。啊,再来一个444。保存一起来看一下啊,我们这儿呢,执行刷新这输出一个111,我如果说光调G呢,它不执行我调next,它执行咱们代码块里边的第一段。
05:06
啊,就是这分隔符到开始这段代码执行,然后呢,我再调一次next的,再看保存它输出的是诶这块内容。再来,哎,走走,保存1234。所以说这个代码它的执行呢,不像原来一下子H完了是吧,而那是通过NEX的方法来控制代码的一个向下执行的。好,那么既然这块它是一个迭代期对象,所以说在这呢,我们还可以干嘛呢?使用full of来做一个什么,做一个便利。看好了。便利哎,For,然后let v of,然后JA。Can log来打一下这个结果,保存看一下这个代码,我们可以先把它注掉啊,这个输出代码啊,我们先把它注掉,保存看这。
06:03
好,每一次调用的返回结果是什么?每一次调用的返回结果是E的后边的这个表达式,它的一个结果,或者自变量这个值。这样看可能看不清楚啊,我们这样子把上边这个next的方法呢,他们的输出结果我们都来做一个输出。这样看的比较清楚,诶,因为咱们知道啊,那返回结果呢,是一个对象里边包括value和down,好走起看这有忘生成了,没关系来打开。一只没有有sorry啊,一只呢,没有耳朵false,一只没有尾巴false,然后真奇怪false,然后到最后啊,它是一个unDeFined down为true,就抹掉第一次next好。返回这个业的里边的结果,然后第二次掉呢,返回第二个业的后边这个结果,第三次呢,返回这个结果,第四次接着往下走,因为没有了啊,然后所以这块呢是一个unDeFined down为true。
07:11
好,这是当前的话,我们对生成器函数做了一个初体验,好,我们先把它保存一下。
我来说两句