箭头函数不能用作生成器,因其语法不支持function声明(如() => {}报错),且无内部状态机制来暂停/恢复执行、不支持yield,调用后仅返回值而非迭代器。

箭头函数不能用在生成器中,是因为它本身没有自己的 this、arguments、super,也没有 yield 能力——最关键的是,箭头函数无法被声明为生成器函数,语法上就不允许加 * 号。
箭头函数不支持生成器语法
生成器函数必须用 function* 声明(或简写为 function* name()),而箭头函数的语法是 () => {},中间没有插入 * 的位置。尝试写成 ()* => {} 或 () =>* {} 都会直接报语法错误。
const gen = () =>* {}; // SyntaxErrorconst gen = ()* => {}; // SyntaxErrorconst gen = function*() {}; // ✅ 正确:传统生成器函数
箭头函数没有内部状态机制
生成器函数的核心在于能暂停和恢复执行,依赖引擎为其维护内部状态(如当前执行位置、词法环境、yield 暂停点)。箭头函数是轻量级的“纯函数表达式”,设计初衷就是简洁、无自身上下文,因此不包含可暂停/恢复的执行模型,自然无法实现 yield 的行为。
- 调用生成器函数返回一个迭代器对象(有
next()、return()、throw()) - 箭头函数调用只返回一个值,无法多次调用并保持中间状态
想在箭头函数里用 yield?只能间接委托
虽然箭头函数本身不能 yield,但可以调用外部生成器,并用 yield* 委托(注意:这仍需在合法生成器内部):
立即学习“Java免费学习笔记(深入)”;
- ❌ 错误:箭头函数内直接写
yield - ✅ 正确:在
function*内部,调用箭头函数并用yield*委托它的返回值(该返回值必须是可迭代对象或另一个生成器)
例如:
const data = [1, 2, 3];
const getItems = () => data; // 箭头函数,返回数组
<p>function<em> generator() {
yield</em> getItems(); // 委托数组的迭代器
}</p>替代方案建议
如果需要函数式风格 + 生成器能力,推荐以下方式:
- 用
function*声明,保持生成器功能,同时用箭头函数处理内部逻辑(如 map、filter 回调) - 用普通函数表达式
const gen = function*() { yield 1; };(ES2015+ 支持) - 若只需异步迭代,考虑
async function+for await...of,配合AsyncIterator


















