Iterator-Generator

56 阅读1分钟

迭代器

迭代器的定义简而言之就是帮我们遍历某个数据结构的对象,这个对象需要符合迭代器协议(iterator protocol)

在js中,迭代器是一个具体的对象,并且有一个特定的next方法

next方法有以下要求,一个无参数或者一个参数的函数,返回一个应当拥有以下两个属性的对象。

done(boolean) 如果迭代器可以产生序列中的下一个值,则为false。(这等价于没有指定done 这个属性。) 如果迭代器已将序列迭代完毕,则为true。这种情况下,value 是可选的,如果它依然存在,即为迭代结束之后的默认返回值。 value 迭代器返回的任何JavaScript 值。done 为true 时可省略。

可迭代对象

当一个对象实现了iterable protocol协议时,它就是一个可迭代对象;

for...of...

遍历的就是可迭代对象,普通对象不能用。

生成器

生成器也是一个函数 只是在后面加一个 * 符号。

其次,可以通过yield关键字配合next()控制函数的执行流程。

最后,生成器函数的返回值是一个Generator(生成器)

生成器是一种特殊的迭代器。

image.png

也可以传递参数 作为上一个yield的返回值。