Skip to content

Commit 52386d1

Browse files
committed
edit docs/generator
1 parent 86c40d6 commit 52386d1

File tree

1 file changed

+6
-15
lines changed

1 file changed

+6
-15
lines changed

docs/generator.md

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,30 +33,21 @@ hw.next()
3333
// { value: undefined, done: true }
3434

3535
hw.next()
36-
// Error: Generator has already finished
37-
// ...
36+
// { value: undefined, done: true }
3837

3938
```
4039

4140
上面代码一共调用了四次next方法。
4241

43-
- 第一次调用
44-
45-
函数开始执行,直到遇到第一句yield语句为止。next方法返回一个对象,它的value属性就是当前yield语句的值hello,done属性的值false,表示遍历还没有结束。
46-
47-
- 第二次调用
48-
49-
函数从上次yield语句停下的地方,一直执行到下一个yield语句。next方法返回的对象的value属性就是当前yield语句的值world,done属性的值false,表示遍历还没有结束。
50-
51-
- 第三次调用
42+
第一次调用,函数开始执行,直到遇到第一句yield语句为止。next方法返回一个对象,它的value属性就是当前yield语句的值hello,done属性的值false,表示遍历还没有结束。
5243

53-
函数从上次yield语句停下的地方,一直执行到函数结束。next方法返回的对象的value属性就是函数最后的返回值,由于上例的函数没有return语句(即没有返回值),所以value属性的值为undefined,done属性的值true,表示遍历已经结束
44+
第二次调用,函数从上次yield语句停下的地方,一直执行到下一个yield语句。next方法返回的对象的value属性就是当前yield语句的值world,done属性的值false,表示遍历还没有结束
5445

55-
- 第四次调用
46+
第三次调用,函数从上次yield语句停下的地方,一直执行到函数结束。next方法返回的对象的value属性就是函数最后的返回值,由于上例的函数没有return语句(即没有返回值),所以value属性的值为undefined,done属性的值true,表示遍历已经结束。
5647

57-
由于此时函数已经运行完毕,next方法直接抛出一个错误
48+
第四次调用,此时函数已经运行完毕,next方法返回与前一次一样的值,value属性为undefined,done属性为true。以后再调用next方法,返回的都是这个值
5849

59-
Generator函数使用iterator接口,每次调用next方法的返回值,就是一个标准的iterator返回值:有着value和done两个属性的对象。其中,value是yield语句后面那个表达式的值,done是一个布尔值,表示是否遍历结束。
50+
总结一下,Generator函数使用iterator接口,每次调用next方法的返回值,就是一个标准的iterator返回值:有着value和done两个属性的对象。其中,value是yield语句后面那个表达式的值,done是一个布尔值,表示是否遍历结束。
6051

6152
Generator函数的本质,其实是提供一种可以暂停执行的函数。yield语句就是暂停标志,next方法遇到yield,就会暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值,作为返回对象的value属性的值。当下一次调用next方法时,再继续往下执行,直到遇到下一个yield语句。如果没有再遇到新的yield语句,就一直运行到函数结束,将return语句后面的表达式的值,作为value属性的值,如果该函数没有return语句,则value属性的值为undefined。
6253

0 commit comments

Comments
 (0)