箭头函数不能使用 yield,因为它不是生成器函数且无[[Generator]]内部属性;只有 function* 声明的函数才支持 yield,否则抛出 SyntaxError。

箭头函数中不能使用 yield 关键字,因为箭头函数**不是生成器函数**,也不具备 [[Generator]] 内部属性。
为什么箭头函数不能用 yield
JavaScript 中只有使用 function* 语法定义的函数才是生成器函数,才能在内部使用 yield。箭头函数是普通函数表达式的一种简写形式,它没有自己的 this、arguments、super 或 new.target,也不支持 yield —— 这是语言层面的硬性限制。
尝试在箭头函数中写 yield 会导致语法错误:
正确写法:改用 function* 生成器函数
如果需要暂停执行、逐次产出值,必须显式使用生成器函数语法:
立即学习“Java免费学习笔记(深入)”;
- 用
function*声明(星号紧贴function关键字) - 函数体内可安全使用
yield - 调用后返回一个迭代器对象,可用
next()驱动
例如:
function* counter() {
yield 1;
yield 2;
yield 3;
}
const it = counter();
console.log(it.next().value); // 1
console.log(it.next().value); // 2想保留箭头风格?可以封装但不能替代
箭头函数本身无法变成生成器,但你可以:
- 把生成器逻辑写在
function*里,再用箭头函数调用它 - 用箭头函数返回一个生成器调用结果(如
() => counter()) - 避免混淆:不要试图在箭头函数体中写
yield,哪怕只有一行
错误示例(禁止):
const bad = () => {
yield 1; // ❌ SyntaxError
};可行替代(正确):
const good = () => {
return (function* () {
yield 1;
yield 2;
})();
};常见误区提醒
有人误以为“箭头函数 + async”能配合 yield,但这是混淆概念:
-
async函数用await,不是yield -
async function*是异步生成器,仍需function*基础语法,不能用箭头 - 没有
async () => yield这种合法组合


















