力扣之2648.生成 斐波那契数列(yield)

/**
 * @return {Generator<number>}
 */
var fibGenerator = function*() {
    let a = 0,
    b = 1;
    yield 0; // 返回 0,并暂停执行
    yield 1; // 返回 1,并暂停执行
    while(true) {
        yield a + b; // 返回 a + b,并暂停执行
        [a, b] = [b, a + b]; // 更新 a 和 b 的值
    }
};

/**
 * const gen = fibGenerator();
 * gen.next().value; // 0
 * gen.next().value; // 1
 */

 yield 描述:

yield 关键字使生成器函数执行暂停,yield 关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的 return 关键字。

yield 关键字实际返回一个 IteratorResult 对象,它有两个属性,value 和 donevalue 属性是对 yield 表达式求值的结果,而 done 是 false,表示生成器函数尚未完全完成。

一旦遇到 yield 表达式,生成器的代码将被暂停运行,直到生成器的 next() 方法被调用。每次调用生成器的 next() 方法时,生成器都会恢复执行,直到达到以下某个值:

  • yield,导致生成器再次暂停并返回生成器的新值。下一次调用 next() 时,在 yield 之后紧接着的语句继续执行。
  • throw 用于从生成器中抛出异常。这让生成器完全停止执行,并在调用者中继续执行,正如通常情况下抛出异常一样。
  • 到达生成器函数的结尾。在这种情况下,生成器的执行结束,并且 IteratorResult 给调用者返回 value 的值是 undefined 并且 done 为 true
  • 到达 return 语句。在这种情况下,生成器的执行结束,并将 IteratorResult 返回给调用者,其 value 的值是由 return 语句指定的,并且 done 为 true

如果将参数传递给生成器的 next() 方法,则该值将成为生成器当前 yield 操作返回的值。

在生成器的代码路径中的 yield 运算符,以及通过将其传递给 Generator.prototype.next() 指定新的起始值的能力之间,生成器提供了强大的控制力。

相关推荐

  1. 【c++】数列

    2024-02-02 13:34:01       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-02 13:34:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-02 13:34:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-02 13:34:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-02 13:34:01       20 阅读

热门阅读

  1. sql INOT IN踩的坑

    2024-02-02 13:34:01       31 阅读
  2. Linux(ubuntu) -- 安装后调配

    2024-02-02 13:34:01       31 阅读
  3. CCF-CSP 202206-1 归一化处理

    2024-02-02 13:34:01       28 阅读
  4. IDEA常用快捷健

    2024-02-02 13:34:01       25 阅读
  5. 点亮第一个LED实验

    2024-02-02 13:34:01       35 阅读
  6. 【极简】Pytorch中的register_buffer()

    2024-02-02 13:34:01       31 阅读
  7. MySQL运维实战(5.4) MySQL元数据乱码

    2024-02-02 13:34:01       39 阅读
  8. 【springBoot】统一功能处理

    2024-02-02 13:34:01       32 阅读