箭头函数不能作为generator函数,因其语法不支持function*声明和yield关键字,且缺乏暂停/恢复执行、状态保存等generator必需的运行时机制。

箭头函数不能作为 Generator 函数,根本原因在于语法结构和语言设计的硬性限制:Generator 函数必须用 function* 语法声明,而箭头函数不支持 * 标记,也无法使用 yield 关键字。
Generator 函数必须显式用 function* 声明
Generator 的核心标识是 function* —— 星号(*)是独立的语法标记,必须紧贴在 function 关键字之后(中间可有空格或换行)。例如:
-
function* gen() { yield 1; }✅ 合法 -
const gen = function*() { yield 1; };✅ 合法(函数表达式形式) -
const gen = *() => { yield 1; };❌ 语法错误,*不能出现在箭头函数前 -
const gen = () => { yield 1; };❌ 即使加了yield,也会报SyntaxError: Unexpected yield
箭头函数缺少 Generator 所需的运行时机制
Generator 不只是“能写 yield”,它依赖一套完整的执行控制模型:暂停/恢复、内部状态机、迭代器协议返回值等。这些能力由引擎为 function* 特别实现,而箭头函数被设计为轻量、无状态的表达式封装工具,不提供:
- 自己的
this、arguments或new.target - 原型对象(
arrowFn.prototype === undefined) - 可暂停的执行上下文(
yield需要保存/恢复调用栈)
实际开发中怎么选
如果需要生成序列、分步执行或配合 for...of / async/await 控制流程,必须用普通函数定义 Generator:
- 要用
yield→ 写function*,别想用箭头函数替代 - 想简化回调 → 箭头函数仍可用,但仅限同步短逻辑或异步
async () => {}(注意:这不是 Generator) - 需要委托另一个生成器 → 只能用
yield*,这同样只在function*中有效
简单说:Generator 是一种函数类型,不是一种写法风格;箭头函数是另一种函数类型,二者在语言层面互斥。想用生成器,就老实用 function*。











