JS Generator 生成器
学习function* · 难度:高级 · +15XP
JavaScript Generator —— 可以暂停的函数
普通函数一旦调用就执行到return。Generator函数(function*)可以中途暂停(yield),然后从暂停处继续执行。它是异步编程和迭代器的基础。
基本用法
function* idGenerator() {
let id = 1;
while (true) {
yield id++; // 暂停并返回值,下次从这继续
}
}
const gen = idGenerator();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
双向传值:next()可以传入参数
function* echo() {
const a = yield '请输入a';
const b = yield '请输入b';
return a + b;
}
const gen = echo();
console.log(gen.next().value); // '请输入a'
console.log(gen.next(10).value); // '请输入b'(10传入变成a)
console.log(gen.next(20).value); // 30 (10+20)
动手练习
- 基础练习:用Generator实现斐波那契数列的无限生成。
- 进阶应用:用Generator+Promise实现async/await的简易版本。
- 项目实战:用Generator实现一个"分页遍历器"——自动处理大量数据的分页加载。