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
用于从生成器中返回值等。