Generator 函数之简介
发布时间:2020-12-15 01:21:27 所属栏目:C语言 来源:网络整理
导读: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 、 命令与函数名之间有一个星号;而是,函数体内部使用yield语句,定义不同内部
<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
、命令与函数名之间有一个星号;而是,函数体内部使用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)的语法功能。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!