什么是生成器函数_javascript中yield关键字怎么用?

5次阅读

生成器函数用function定义,调用返回迭代器;yield交出控制权并返回值,next()可传参赋值给yield表达式;yield委托其他迭代器;常用于自定义迭代、异步处理、无限序列和状态机。

什么是生成器函数_javascript中yield关键字怎么用?

生成器函数是 javaScript 中一种特殊函数,能**暂停和恢复执行**,适合处理异步流程、大数据流或需要按需计算的场景;yield 是它的核心关键字,用于**交出函数控制权并返回一个值**,下次调用时从暂停处继续。

生成器函数怎么定义和调用?

function*(星号紧贴 function)定义,调用时不立即执行,而是返回一个迭代器对象

示例:

function* count() {   yield 1;   yield 2;   yield 3; } const it = count(); // 不执行函数体,只返回迭代器 console.log(it.next()); // { value: 1, done: false } console.log(it.next()); // { value: 2, done: false } console.log(it.next()); // { value: 3, done: false } console.log(it.next()); // { value: undefined, done: true }

yield 怎么交出值并接收外部传入的值?

yield 表达式本身有返回值——即下一次 next(…) 调用时传入的参数。第一次 next() 传参无效(因无上一个 yield 等待接收):

立即学习Java免费学习笔记(深入)”;

  • yield 1 → 返回 {value: 1, done: false},同时暂停
  • it.next(‘hello’) → ‘hello’ 成为当前 yield 表达式的值,继续执行

常见写法:

什么是生成器函数_javascript中yield关键字怎么用?

Pebblely

ai产品图精美背景添加

什么是生成器函数_javascript中yield关键字怎么用? 96

查看详情 什么是生成器函数_javascript中yield关键字怎么用?

function* echo() {   let input = yield 'ready?';   console.log(input); // 输出 'got it!'   yield 'done'; } const e = echo(); console.log(e.next());        // { value: 'ready?', done: false } console.log(e.next('got it!')); // 控制台打印 'got it!',返回 { value: 'done', done: false }

yield* 怎么委托另一个生成器或可迭代对象

yield* 用来“展开”另一个迭代器,把它的每个 yield 值依次产出,相当于把控制权暂时转交给它:

  • yield* arr → 等价于对 arr 的每个元素 yield 一次
  • yield* anotherGenerator() → 逐个产出另一个生成器的所有值

例子:

function* nums() {   yield 1; yield 2; } function* all() {   yield 'start';   yield* nums(); // 展开   yield 'end'; } [...all()]; // ['start', 1, 2, 'end']

实际中生成器常用来做什么?

虽然 async/await 已成主流,但生成器仍有不可替代的用途:

  • 实现自定义迭代逻辑(比如树的深度优先遍历)
  • 配合 co 库或手写 runner 处理异步(早期 redux-saga 就基于它)
  • 生成无限序列(如斐波那契数列),靠 next() 按需取值,不爆内存
  • 状态机建模:每个 yield 代表一个稳定状态,next() 触发状态迁移

基本上就这些。yield 不是魔法,本质是函数执行权的让渡与回收,理解这一点,用起来就不容易卡壳。

以上就是什么是生成器函数_

text=ZqhQzanResources