<table class="javascript">
<tr class="li1"><td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 函数是ES6提供的一种异步变成解决方案,语法行为与传统函数完全不同; 执行Generator函数会返回一个遍历器对象(也可以说Generator是一个遍历器生成函数),返回遍历器对象,可以一次遍历Generator函数内部的每一个状态,Generator函数内部封装了多个状态; Generator函数是一个普通函数,但是有两个特征。、命令与函数名之间有一个星号;而是,函数体内部使用yield语句,定义不同内部状态(要和前面的那个Generator封装了多个内部状态联系在一起哦~); helloWorldGenerator 函数名之间是*号 yield yield hw helloWorldGenerator函数(于普通函数运行一样),运行这个函数,函数不会立即执行,而是一个指向内部状态的指针对象,返回一个遍历器对象,然后对象可以一次遍历函数内部的每一个状态 下一步,必须调用遍历器对象的next方法,使得指针移向下一个状态 console.hw. console.hw. console.hw. console.hw. value属性表示当前的内部状态的值,是yield语句后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。 运行next方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到yield语句(或者 语句)为止;可以理解为Generator函数是分段执行的,遇到yiled停止,遇到next开始 上面的运行代码使我想起来了Iterator接口,这个接口也是返回next方法,运行结果也是返回一个键值对很相似,进而让我想起了...循环语句。。。 i of hw console.i 看过了简单的Gerator函数,现在下面仔细说说yield语句吧 其实简单的说yield语句就是暂停标志,Generator函数运行的时候返回的next对象,对函数内部状态遍历的时候,遇到yeild语句就会暂停,并将yield语句后的值输出作为value的值,再次调用next方法的时候再次寻找yeild知道碰到函数最后的,如果没有如,next返回的对象就是value:done 遍历器对象的next方法的运行逻辑如下。 ()遇到yield语句,就暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值,作为返回的对象的value属性值。 ()下一次调用next方法时,再继续往下执行,直到遇到下一个yield语句。 ()如果没有再遇到新的yield语句,就一直运行到函数结束,直到语句为止,并将语句后面的表达式的值,作为返回的对象的value属性值。 ()如果该函数没有语句,则返回的对象的value属性值为。 需要注意的是,yield语句后面的表达式,只有当调用next方法、内部指针指向该语句时才会执行,因此等于为JavaScript提供了手动的“惰性求值”(Lazy Evaluation)的语法功能。