From a55a68cbb15f4cac0bfd27a4e45a8d3cd0767c00 Mon Sep 17 00:00:00 2001 From: ruanyf Date: Wed, 23 Apr 2014 19:18:54 +0800 Subject: [PATCH] edit generator --- docs/generator.md | 4 ++-- docs/iterator.md | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/generator.md b/docs/generator.md index 8bb7e61..0a1ebaf 100644 --- a/docs/generator.md +++ b/docs/generator.md @@ -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语句不具备位置记忆的功能。 diff --git a/docs/iterator.md b/docs/iterator.md index 88f83f0..dac969a 100644 --- a/docs/iterator.md +++ b/docs/iterator.md @@ -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 + +```