mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2024-04-21 12:32:22 +00:00
edit docs/generator
This commit is contained in:
+6
-15
@@ -33,30 +33,21 @@ hw.next()
|
||||
// { value: undefined, done: true }
|
||||
|
||||
hw.next()
|
||||
// Error: Generator has already finished
|
||||
// ...
|
||||
// { value: undefined, done: true }
|
||||
|
||||
```
|
||||
|
||||
上面代码一共调用了四次next方法。
|
||||
|
||||
- 第一次调用
|
||||
第一次调用,函数开始执行,直到遇到第一句yield语句为止。next方法返回一个对象,它的value属性就是当前yield语句的值hello,done属性的值false,表示遍历还没有结束。
|
||||
|
||||
函数开始执行,直到遇到第一句yield语句为止。next方法返回一个对象,它的value属性就是当前yield语句的值hello,done属性的值false,表示遍历还没有结束。
|
||||
第二次调用,函数从上次yield语句停下的地方,一直执行到下一个yield语句。next方法返回的对象的value属性就是当前yield语句的值world,done属性的值false,表示遍历还没有结束。
|
||||
|
||||
- 第二次调用
|
||||
第三次调用,函数从上次yield语句停下的地方,一直执行到函数结束。next方法返回的对象的value属性就是函数最后的返回值,由于上例的函数没有return语句(即没有返回值),所以value属性的值为undefined,done属性的值true,表示遍历已经结束。
|
||||
|
||||
函数从上次yield语句停下的地方,一直执行到下一个yield语句。next方法返回的对象的value属性就是当前yield语句的值world,done属性的值false,表示遍历还没有结束。
|
||||
第四次调用,此时函数已经运行完毕,next方法返回与前一次一样的值,value属性为undefined,done属性为true。以后再调用next方法,返回的都是这个值。
|
||||
|
||||
- 第三次调用
|
||||
|
||||
函数从上次yield语句停下的地方,一直执行到函数结束。next方法返回的对象的value属性就是函数最后的返回值,由于上例的函数没有return语句(即没有返回值),所以value属性的值为undefined,done属性的值true,表示遍历已经结束。
|
||||
|
||||
- 第四次调用
|
||||
|
||||
由于此时函数已经运行完毕,next方法直接抛出一个错误。
|
||||
|
||||
Generator函数使用iterator接口,每次调用next方法的返回值,就是一个标准的iterator返回值:有着value和done两个属性的对象。其中,value是yield语句后面那个表达式的值,done是一个布尔值,表示是否遍历结束。
|
||||
总结一下,Generator函数使用iterator接口,每次调用next方法的返回值,就是一个标准的iterator返回值:有着value和done两个属性的对象。其中,value是yield语句后面那个表达式的值,done是一个布尔值,表示是否遍历结束。
|
||||
|
||||
Generator函数的本质,其实是提供一种可以暂停执行的函数。yield语句就是暂停标志,next方法遇到yield,就会暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值,作为返回对象的value属性的值。当下一次调用next方法时,再继续往下执行,直到遇到下一个yield语句。如果没有再遇到新的yield语句,就一直运行到函数结束,将return语句后面的表达式的值,作为value属性的值,如果该函数没有return语句,则value属性的值为undefined。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user