003|JavaScript ES6新特性之生成函数

生成函数(generator function)是一种新型函数,是一个分段执行函数。它的语法与函数语法基本一致,但以下一些不同点:

  1. function关键字被替换成了 function*
  2. 返回返回值是一个生成器(generator)
  3. 通过 yield 关键字来分段

例如下面是一个生成函数:

function* sayHi()  // 使用function*来定义生成函数
{
    console.log("Hello") // 代码段1
    yield // 使用yield来分段

    console.log("World") // 代码段2
}

生成器

首先来理解一下生成器(generator)。生成品遵循iterator协议,有next方法。
普通的迭代器用于遍历对象(或容器),而生成器用于遍历生成函数的代码段。每调用一次next,则下一个代码段将被调用。

接着上例,我们来看一下生成器的使用:

var generator = sayHi() // 调用生成函数返回生成器
generator.next() // 运行代码段1
generator.next() // 运行代码段2

第一次调用next()时,代码段1运行,第二次调用next()时,代码段2运行。

yield 返回值

上述代码中,仅仅通过yield来将代码分段,实际上yield也可以传递value给生成器。
通过一个例子来了解一下:

function* idMaker() {
    yield 1 // 1将作为next的value
    yield 2 // 2将作为next的value
    yield 3 // 3将作为next的value
}

var generator = idMaker()
console.log(generator.next().value) // 输出 1
console.log(generator.next().value) // 输出 2
console.log(generator.next().value) // 输出 3

好了,完结。

什么是WeakMap?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在此处先列下本篇文章的主要内容 简介 next方法的参数 for...of循环 Generator.prototy...
    醉生夢死阅读 5,283评论 3 8
  • 简介 基本概念 Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。本章详细介绍...
    呼呼哥阅读 4,744评论 0 4
  • 本文作者就是我,简书的microkof。如果您觉得本文对您的工作有意义,产生了不可估量的价值,那么请您不吝打赏我,...
    microkof阅读 23,829评论 16 78
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 4,645评论 0 0
  • 昨晚和老婆一起在家里,2个人都不饿,加上老婆胃不舒服,所有提议煮红枣粥喝,刚好家里有老婆从公司带来的腰果,老婆说一...
    Ai纯蓝阅读 2,755评论 0 1

友情链接更多精彩内容