1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

edit generator

This commit is contained in:
ruanyf 2014-04-23 19:18:54 +08:00
parent 78641c9cd2
commit a55a68cbb1
2 changed files with 15 additions and 2 deletions

View File

@ -4,7 +4,7 @@
所谓Generator简单说就是一个内部状态的遍历器即每调用一次遍历器内部状态发生一次改变可以理解成发生某些事件。ES6引入了generator函数作用就是可以完全控制内部状态的变化依次遍历这些状态。
ES6的generator函数有两个特征。一是function关键字后面有一个星号二是函数体内部使用yield语句定义遍历器的每个成员即不同的内部状态
generator函数就是普通函数,但是有两个特征。一是function关键字后面有一个星号二是函数体内部使用yield语句定义遍历器的每个成员即不同的内部状态
```javascript
@ -58,7 +58,7 @@ hw.next()
Generator函数使用iterator接口每次调用next方法的返回值就是一个标准的iterator返回值有着value和done两个属性的对象。其中value是yield语句后面那个表达式的值done是一个布尔值表示是否遍历结束。
Generator函数的本质其实是使用yield语句暂停执行它后面的操作调用next方法时再继续往下执行直到遇到下一个yield语句,并返回该语句的值。如果没有再遇到新的yield语句就一直运行到函数结束或者直到return语句为止
Generator函数的本质其实是提供一种可以暂停执行的函数。yield语句就是暂停标志next方法遇到yield就会暂停执行后面的操作并将紧跟在yield后面的那个表达式的值作为返回对象的value属性的值。当下一次调用next方法时再继续往下执行直到遇到下一个yield语句。如果没有再遇到新的yield语句就一直运行到函数结束将return语句后面的表达式的值作为value属性的值如果该函数没有return语句则value属性的值为undefined
yield语句与return语句有点像都能返回紧跟在语句后面的那个表达式的值。区别在于每次遇到yield函数暂停执行下一次再从该位置继续向后执行而return语句不具备位置记忆的功能。

View File

@ -61,4 +61,17 @@ for (var n of it) {
}
```
在ES6中数组本身就具有iterator接口。
```javascript
const arr = ['red', 'green', 'blue'];
for(let v of arr) {
console.log(v);
}
\\ red
\\ green
\\ blue
```