生成器函数里的return和yield有啥区别?

Mc.浩然 阅读 39

我在学生成器函数,看到既能用yield也能用return,但不太明白它们到底有啥不同。比如下面这段代码:

function* gen() {
  yield 1;
  return 2;
  yield 3;
}
const g = gen();
console.log(g.next()); // { value: 1, done: false }
console.log(g.next()); // { value: 2, done: true }

为啥第二个next()就直接结束(done变成true)了?而且后面的yield 3根本没执行。是不是return会立刻终止生成器?那它和普通函数的return行为一样吗?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
极客开心
啊...大半夜看到这个问题。简单说:return在生成器里就是终点了,后面的yield直接跳过。和普通函数不一样的是,return的值还能通过next拿到,但done会变true。

试试这个例子更清楚:
function* gen() {
yield 'a';
return 'b';
yield 'c'; // 永远不会执行
}
const g = gen();
console.log(g.next()); // {value: 'a', done: false}
console.log(g.next()); // {value: 'b', done: true}
console.log(g.next()); // {value: undefined, done: true}


所以记住:yield是暂停,return是彻底结束。困死了...
点赞
2026-03-07 03:03
程序猿远香
直接这样:yield是暂停并返回一个值,下次还能继续执行;return是彻底结束生成器,之后再调next()都只返回{value: undefined, done: true}。生成器里return后面的代码根本不会执行,跟普通函数一样会提前终止,所以yield 3压根没机会跑。
点赞 3
2026-02-25 03:00