📜  怎样理解 JavaScript 中的 Generator函数?

📅  最后修改于: 2022-05-13 01:56:12.780000             🧑  作者: Mango

怎样理解 JavaScript 中的 Generator函数?

生成器即时生成价值,这意味着只要需要该值,就只会生成它。这意味着该值已生成但未存储在内存中,因此执行时间更短。它在关键字函数即函数*之后使用星号(*) 符号来告诉 javaScript 它是一个生成器函数。生成器函数返回对象。

用例:

  1. 它在无限循环中使用,不会停止计算机或冻结您的程序。
  2. 它用作迭代器。

它具有特殊类型的返回关键字,即产量。 yield 的目的是运行一些代码然后返回值,运行更多代码并返回类似的值。

示例:当您在每个收益上访问 API 端点并且不知道用户想要多少结果时,执行收益的每个步骤都很昂贵时很有用,因此在这种情况下,您可以延迟这些 API 调用,直到他们实际上是需要的。

生成器有两个属性:

  1. 价值属性
  2. 完成的财产

句法:

Javascript
function* Generator(){
  yield 1
  yield 2
  yield 3
}
  
const gen = Generator();


Javascript


Javascript


Javascript
function* Generator(){
    let i=0;
    while(i<5){
      yield i;
      i++;
    }
  }
     
  const gen = Generator();
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());


Javascript


Javascript


Javascript


它主要使用三种函数:

  1. 下一个函数
  2. 返回函数
  3. 投掷函数

因此,在这里我们通过示例讨论下一个函数。

示例 1:

Javascript


输出:

示例 2:

Javascript


当生成器第一次调用它创建具有 next 属性的对象时,它不会打印任何内容,因为 next 属性允许单独执行生成器内的所有代码。

示例 3:

Javascript

function* Generator(){
    let i=0;
    while(i<5){
      yield i;
      i++;
    }
  }
     
  const gen = Generator();
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());
  console.log(gen.next());

输出:

这里 while 循环只运行 5 次,并且在该循环终止之后,这就是为什么这里的第 5 个索引值未定义并且 done 属性为 true,因为在该生成器无法生成值之后,yield 返回直到 5 值。

示例 4:

Javascript


输出:

0
1

这里只返回值。

示例 5:

Javascript


输出:

这里生成器用作数组的迭代器。

示例 6:

Javascript


输出:

每次调用生成器函数时,它都会为单独的对象创建一个新实例,该对象具有自己的函数版本,可以自行迭代。