js yield 实现
yield 实现原理
在 JavaScript 中,yield 是生成器函数(Generator Function)的关键字,用于暂停和恢复函数执行。生成器函数通过 function* 语法定义,调用时返回一个生成器对象(Generator Object),该对象遵循迭代器协议。

基本用法示例
function* simpleGenerator() {
yield 1;
yield 2;
return 3;
}
const gen = simpleGenerator();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: true }
实现机制
生成器函数通过 yield 暂停执行,保存当前上下文(包括局部变量、参数等)。每次调用 next() 方法时,函数从上次暂停处继续执行,直到遇到下一个 yield 或 return。

手动模拟 yield
可以通过闭包和状态管理模拟生成器行为:
function createSimulatedGenerator() {
let state = 0;
return {
next() {
switch (state) {
case 0:
state++;
return { value: 1, done: false };
case 1:
state++;
return { value: 2, done: false };
default:
return { value: undefined, done: true };
}
}
};
}
异步生成器
yield 可与异步操作结合,实现类似 async/await 的流程控制:
async function* asyncGenerator() {
const data = await fetchData();
yield data;
}
注意事项
- 生成器对象只能遍历一次,再次调用
next()会返回{ done: true } yield*用于委托给另一个生成器或可迭代对象- 生成器函数不能使用箭头函数语法
实际应用场景
- 惰性计算:按需生成值,节省内存
- 状态机:管理复杂的状态转换
- 异步流程控制:配合 Promise 使用
以上内容展示了 JavaScript 中 yield 的基本实现原理和使用方法,通过生成器函数可以实现更灵活的迭代控制和异步编程模式。






