使用 JavaScript 生成器函数生成范围
它允许你定义一个包含自有迭代算法的函数,同时它可以自动维护自己的状态。它们使用 function*
(function
关键字后跟一个星号)进行定义,并使用
generateRange
,该函数将返回 start
和 end
之间的每个值,每次按 step
递增。我们使用 调用 Generator.prototype.next()
,直到它返回 {value: undefined, done: true}
来遍历生成器产生的值。
Symbol.iterator
指定对象的默认迭代器。通常情况下,
在此示例中,可以看到对象通过将生成器函数分配给其 属性而变得可迭代。如果您想迭代一些任意数据或创建一个使用生成器函数的可迭代对象,这会特别方便。
整合
了解这两个概念的工作原理后,我们可以将它们结合起来,创建一个类似于 Python 或 Ruby 的范围生成器:
range
函数接收 end
、start
和 step
参数,用于定义生成范围。generateRange
生成器函数通过 yield
关键字逐步生成值,直到其满足循环条件。然后,我们将此生成器函数赋给 Symbol.iterator
属性,从而使返回的对象具有可迭代性。最后,我们可以使用扩展运算符(...
)或 for...of