ES6中引入了 Generator(生成器)这一概念,它是一种特殊的函数,可以产生多个值,并且能够在这些值之间进行暂停和恢复。
以下是对 Generator 的理解:
生成器函数:Generator 是通过定义生成器函数来创建的,使用 function 关键字后跟一个星号 (*),即 function*。生成器函数内部使用 yield 关键字来定义要生成的值。
迭代器:通过调用生成器函数,可以得到一个迭代器对象,这个迭代器对象可以按需生成一个个的值。每次调用迭代器的 next() 方法,都会执行生成器函数,直到遇到 yield 关键字,然后将 yield 后面的值作为结果返回。当再次调用 next() 方法时,生成器函数会从上次暂停的地方继续执行。
暂停和恢复:生成器函数具有暂停和恢复的能力,它可以在每次生成一个值后暂停,并保留当前的状态。这使得生成器函数非常适合处理一些需要分步骤执行的操作,例如异步任务的串行化、遍历大型数据集等。
双向通信:生成器函数可以接收外部传入的值,这使得与生成器函数进行双向通信成为可能。调用迭代器的 next(value) 方法时,可以将一个值传递给生成器函数,这个值会成为上一次暂停的 yield 表达式的结果。这样,可以在生成器函数内部根据外部传入的值进行相应的处理。
无穷序列:由于生成器函数的特性,可以轻松地创建无穷序列。例如,一个生成器函数可以无限地产生斐波那契数列的值,而不需要事先计算和存储所有的值。
总结来说,Generator 是 ES6 中新增的一种特殊函数,通过使用 yield 关键字和迭代器对象,它可以按需生成多个值,并且具有暂停和恢复的能力。这使得 Generator 在异步编程、数据处理和无穷序列等场景下十分有用。