首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascript 生成器

什么是生成器?

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

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

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

这种“返回”不是传统的从函数 。所以它被赋予了一个特殊的名称——。

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

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

定义特殊的生成器函数

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

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

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

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

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

生成器函数

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

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

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

调用生成器函数

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

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

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

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

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

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

这就是为什么我们要调用两次

会得到以下输出:

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

生成器和循环

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

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

在下一篇文章中,我们将更深入地探讨 循环,并探索怎样为 javascript 提供一种内置方法来循环 javascript 中的任何对象。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200824A0MBFL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券