第七章 迭代器与生成器 小结

Posted by CodingWithAlice on September 24, 2024

​ 迭代是一种所有编程语言中都可以看到的模式。ECMAScript 6 正式支持迭代模式并引入了两个新的 语言特性:迭代器和生成器。

​ 任何实现 Iterable接口的对象都有一个 Symbol.iterator 属性,这个属性引用【默认迭代器】。默认迭代器就像一个迭代器工厂,也就是一个函数,调用之后会产生一个实现 Iterator 接口的对象。

​ 迭代器必须通过连续 调用 next() 方法 才能连续取得值,这个方法返回一个 IteratorObject。这个对象包含一个 done 属性(布尔值,表示是否还有更多值可以访问)和一个 value 属性(包含迭代器返回的当前值)。这个接口可以通过手动反复调用 next() 方法来消费,也可以通过原生消费。比如 for-of 循环来自动消费。

​ 生成器是一种特殊的函数,调用之后会返回一个生成器对象。生成器对象实现了 Iterable 接口,因此可用在任何消费可迭代对象的地方。生成器的独特之处在于 支持 yield 关键字,这个关键字能够 暂停 执行生成器函数。使用 yield 关键字还可以通过 next() 方法接收输入和产生输出。在加上星号之后,yield 关键字可以将跟在它后面的可迭代对象 序列化为一连串值

《红宝书》-18

《红宝书》-19