📜  解释 ES6 中的生成器函数

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

解释 ES6 中的生成器函数

ES6 引入了一个名为 Generator(或 Generator函数)的新概念。它为您提供了一种使用迭代器和函数的新方法。 ES6 生成器是一种新型的函数,可以中途暂停,也可以中途多次再恢复。在标准函数中,控制权一直由被调用函数直到它返回,但是 ES6 中的生成器函数允许调用者函数控制被调用函数的执行。

生成器和常规函数的区别在于:

  • 作为对生成器调用的响应,它的代码不会运行。取而代之的是,它返回一个称为“生成器对象”的特殊对象来管理执行。
  • 在任何时候,生成器函数都可以将控制权返回(或让出)给调用者。
  • 与常规函数不同,生成器可以根据需要返回(或产生)多个值。

语法:生成器函数的语法与常规函数相似。唯一的区别是,生成器函数在函数关键字后用星号 (*) 表示。

function *myfunction() { }

Yield运算符:在 yield 语句中,函数执行被暂停,并向调用者返回一个值。在这种情况下,保留了足够的状态以使函数从中断的地方恢复。在最后一次 yield 运行之后,函数在恢复后立即恢复执行。您可以使用此函数生成一系列值。

JavaScript next 方法: next() 方法将在接收到参数时恢复生成器函数的执行,用 next() 方法的参数替换暂停执行的 yield 表达式。 next() 方法返回的对象总是有两个属性。

  • 价值——产生的价值就是价值。
  • done -函数的完成状态可以表示为布尔值 true。否则,它会产生错误。

示例:在此示例中,我们使用生成器函数生成 3 个数字,然后连续调用生成器函数4 次以查看实际输出,总而言之,当我们第四次调用生成器函数时,它给出了value 为 undefined,done 属性为 true。因为在这次调用中,生成器函数已经完成了三个连续数字的生成,所以当我们第四次调用该函数时,它没有给出任何值并将完成状态更新为 true,这意味着第四次没有值生成。

JavaScript


JavaScript


JavaScript


输出:

{
  done: false,
  value: 1
}
{
  done: false,
  value: 2
}
{
  done: false,
  value: 3
}
{
  done: true,
  value: undefined
}

生成器函数中的返回语句:返回语句将指定的值发送回其调用者。它结束函数调用的执行并将结果返回给调用者。在 return 语句之后定义的语句不在函数中执行。因此,return 语句应该出现在函数的末尾。

示例 2:这里我们使用了第 3 行的 return 语句来查看 return 在生成器函数中是如何工作的。通常,当我们在 return 语句之后编写任何语句时,它会给出错误,但在这里,当在 return 语句之后编写任何 yield 语句时,它不会给出任何错误,只是显示生成器函数调用已结束,这意味着没有进一步的步骤生成号码。

JavaScript


输出:

{
  done: false,
  value: 1
}
{
  done: false,
  value: 2
}
{
  done: true,
  value: 3
}
{
  done: true,
  value: undefined
}

在另一个生成器函数内部调用一个生成器函数来生成一个函数:我们可以通过使用yield *运算符(或语句)在另一个生成器函数内部调用一个生成器函数。

示例 3:在此示例中,我们使用 yield * 语句在另一个生成器函数中调用一个生成器函数。有两个生成器函数,一个名为generator ,另一个名为myfunction ,这两个函数都是参数函数。在这里,我们通过调用并将参数传递给该函数来创建生成器函数的对象,在生成器函数内部,我们将使用 yield *运算符调用生成器函数myfunction

JavaScript


输出:

{
  done: false,
  value: 6
}
{
  done: false,
  value: 7
}
{
  done: false,
  value: 8
}
{
  done: false,
  value: 9
}
{
  done: false,
  value: 11
}
{
  done: true,
  value: undefined
}