ES6 生成器

在 ES6 中,生成器(Generator)是一种特殊的函数,可以用于生成一系列值,这些值可以被惰性地一次一个地产生出来,避免了一次性生成大量的数据。

生成器通过 function* 关键字定义,内部使用 yield 关键字可以将控制权暂时交给生成器的调用者,允许在每次暂停时返回一个值。每次调用生成器的 next() 方法会使其运行到下一个 yield 表达式,直到遇到 return 表达式或者函数结束。生成器可以接收参数,这些参数可以用于在生成器内部控制执行流程。

以下是一个简单的示例,展示了如何使用生成器生成斐波那契数列:

function* fibonacci() {
  let [prev, curr] = [0, 1];
  while (true) {
    [prev, curr] = [curr, prev + curr];
    yield curr;
  }
}

const fib = fibonacci();
console.log(fib.next().value); // 1
console.log(fib.next().value); // 2
console.log(fib.next().value); // 3
console.log(fib.next().value); // 5
console.log(fib.next().value); // 8

在上面的示例中,定义了一个生成器 fibonacci(),使用 while 循环和 yield 关键字生成斐波那契数列中的每个数,然后通过调用 next() 方法遍历生成器,输出了数列中的前几个数。

需要注意的是,生成器是一种强大的工具,可以用于处理异步任务、迭代大量数据等场景。此外,ES6 还提供了一些有用的生成器方法,例如 yield* 用于委托给其他生成器、return 用于从生成器中返回值等。