箭头函数不支持generator语法,因其无function关键字,无法添加声明,且内部使用yield会直接报语法错误;需迭代逻辑时必须使用function。

箭头函数天生不支持 Generator 语法
Generator 函数的核心标识是 function*(星号紧贴 function 关键字),而箭头函数根本就没有 function 关键字,语法结构上就排除了加 * 的可能性。比如 const gen = *() => {} 或 const gen = ()* => {} 都是非法语法,JavaScript 引擎直接报错,连解析都过不去。
内部写 yield 会立即报语法错误
即使跳过声明形式,试图在箭头函数体里使用 yield,也会失败:
-
const bad = () => { yield 1 }→ 报SyntaxError: Unexpected reserved word -
const alsoBad = async () => { yield 1 }→ 同样报错,async和yield不兼容,且箭头函数本身不支持 generator 语义
这是因为 yield 只能在 Generator 函数或异步 Generator 函数(async function*)中合法出现,而这两者都依赖 function 关键字作为语法锚点。
需要迭代逻辑时,必须换用传统 function*
如果你要实现可暂停、可恢复的执行流程(比如分页拉取、状态机、惰性序列),就得回归标准写法:
function* counter() { let i = 0; while (true) yield i++ }async function* fetchPages(url) { for (let page = 1; ; page++) { const data = await fetch(`${url}?page=${page}`); yield data; } }
箭头函数在这里没有替代方案——它不是“暂时没实现”,而是语言设计上明确排除,属于不可绕过的限制。
为什么这样设计?本质是定位不同
箭头函数的设计目标是简化**短小、无状态、不需实例化、不需动态上下文**的回调;Generator 函数则面向**有状态、可中断、需控制执行流**的复杂场景。两者语义层级和运行模型完全不同:一个靠词法绑定轻量闭包,一个靠引擎维护内部执行上下文与暂停点。强行合并既增加语法负担,也模糊核心用途。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











