返回
JavaScript 中的生成器使用指南(上)
前端
2023-12-23 18:47:47
简介
生成器是 JavaScript 中的一项强大特性,它允许您创建可暂停和恢复的函数,从而生成一系列值。生成器通过 yield
实现,它充当一个检查点,允许函数在需要时暂停执行并返回一个值。
语法
生成器函数与普通函数的语法略有不同。您需要在函数声明前添加一个星号 *
来声明一个生成器函数:
function* myGenerator() {
// 生成器函数主体
}
使用
要使用生成器,您需要调用该函数并将其分配给一个变量。该变量将保存指向生成器对象的引用。
const generator = myGenerator();
然后,您可以使用 next()
方法从生成器中获取值。 next()
方法返回一个对象,其中包含两个属性:
value
:生成器当前返回的值done
:一个布尔值,指示生成器是否已完成
const result = generator.next();
console.log(result.value); // 输出生成器返回的第一个值
您可以继续调用 next()
方法来获取生成器中的后续值,直到 done
属性为 true
,表示生成器已完成。
与默认迭代器的关系
生成器与默认迭代器密切相关。实际上,每个生成器都是一个迭代器。您可以使用 for...of
循环遍历生成器:
for (const value of myGenerator()) {
console.log(value);
}
使用场景
生成器在各种场景中都非常有用,包括:
- 生成一序列的值,例如斐波那契数列
- 暂停和恢复长时间运行的操作,例如文件读取
- 创建可迭代的对象,例如链表
示例
生成斐波那契数列:
function* fibonacci() {
let [prev, curr] = [0, 1];
while (true) {
yield curr;
[prev, curr] = [curr, prev + curr];
}
}
使用 yield
暂停函数执行:
function* readFile() {
const file = yield fetch('file.txt');
const contents = yield file.text();
return contents;
}
在 for...of
循环中使用生成器:
const myList = [1, 2, 3, 4, 5];
for (const value of myList) {
console.log(value);
}