Javascript生成器怎么用

  介绍

小编给大家分享一下Javascript生成器怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

什么是生成器?

生成器是在函数内部运行的一些代码

<李>

返回值后,它会自行暂停,并且,

<李>

调用程序可以要求取消暂停并返回另一个值

这种“返回“不是传统的从函数回报。所以它被赋予了一个特殊的名称,收益率。

生成器语法因语言而异.Javascript的生成器语法类似于PHP,但是区别也很大,如果你希望它们的作用相同,那么最终你会感到非常困惑。

在Javascript中,如果想要使用生成器,则需要:

<李>

定义特殊的生成器函数

<李>

调用该函数创建一个生成器对象

<李>

在循环中使用该生成器对象,或直接调用其一方法

我们以下面这个简单的程序做为起点,并执行以下每个步骤:

//,文件:sample-program.js   function  * createGenerator (), {   ,(let 我=0;i<20;我+ +),{   我,油品收率   ,}   }      const  generator =, createGenerator ()      console.log (generator.next ())   console.log (generator.next ())

如果运行这段代码,则会得到以下输出:

美元节点示例程序。js

{值:0,完成:假}
{价值:1、完成:假}

下面我来解释该程序是如何工作的。

生成器函数

首先,代码中存在生成器函数的定义:

函数*,createGenerator (), {   ,(let 我=0;i<20;我+ +),{   我,油品收率   ,}   }

函数后面的*告诉javascript这是一个生成器函数。以下写法都是生成器函数的有效定义。

* createGenerator函数   函数* createGenerator   function  * createGenerator

*,并不是函数名的一部分。而是函数*符号定义了生成器。

调用生成器函数

定义了生成器函数后,我们将其命名为其他名称的函数。

//,注意:当调用时,没有,只* *,不是函数名称的一部分//,“function  *”,是用于定义生成器函数的符号   const  generator =, createGenerator ()

但是要记住:createGenerator函数没有返回值。这是因为生成器函数没有传统的返回值。相反,当你直接调用生成器函数时,它总是返回实例化的发电机对象。

这个生成器对象具有一个下一个方法。调下将用在生成器函数内部运行代码。

函数*,createGenerator (), {   ,(let 我=0;i<20;我+ +),{   我,油品收率   ,}   }

这很重要,足以再次调用它。直接调用生成器函数不会在生成器函数中运行任何代码。而是创建一个生成器对象。它在生成器对象上调用接下来,从而调用生成器函数中的代码。

首次在生成器对象上调下时用,内部代码将会一直运行,直到出现产量语句。一旦执行到收益,javascript将会暂停该代码的执行,而明年将返回(即给你,或收益率)一个对象,该对象包含收益率行中的值。

当你第二次(或第三次,第四次甚至更多次)再调下时用,代码将会取消暂停并继续运行(在上次调用时中断的地方)。变量(例如本例中我的)将会保持它的值。当代码到达另一个收益率语句时,该函数会再次暂停,并返回一个包含屈服值的对象。

这就是为什么我们要调用两次,下一个

console.log (generator.next ())   console.log (generator.next ())

会得到以下输出:

{值:0,完成:假}
{价值:1、完成:假}

生成器函数中的代码执行完毕后,将来对未来的任何调用都会返回一个对象,该对象的值为未定义且完成设置为真的。

{,值:未定义,,:,true }

生成器和循环

虽然可以在生成器对象上手动调用接下来,但我们主要是要在循环中使用。看一下这个稍作修改的程序。

//,文件:sample-program.js   @highlightsyntax@jscript   function  * createGenerator (), {   ,(let 我=0;i<5,我+ +),{   我,油品收率   ,}   }      const  generator =, createGenerator ()   (const  value  of 发电机),{   ,console.log(值)   }

当在……的循环中使用生成器对象时,每次循环都会在生成器对象上调用接下来,并用产生的值填充变量(上面的值)。运行该程序将会输出以下内容:

Javascript生成器怎么用