在 ES6 中新增了生成器函数的语法,本文解释了与生成器函数有关的 yield* 关键字,及其使用场景。

描述

根据语法规范,yield* 的作用是代理 yield 表达式,将需要函数本身产生(yield)的值委托出去。yield* 后面跟一个生成器函数、或其他可迭代的对象(如一个数组、字符串、arguments对象)。

yield* 表达式的返回值,就是其后面可迭代对象迭代完毕时的返回值。

举例

第 1 步,构造一个生成器函数。

function* numbers () {
yield 1;
yield 2; return 'numbers';
}

第 2 步,在上述生成器函数外层做一个代理。

function* delegate () {
var str = yield* numbers();
console.log(str); yield 3; return 'delegate';
}

第 3 步,构造迭代器。

var iterator = delegate();

第 4 步,输出迭代结果。

 /**
* 第一次输出结果
* { value: 1, done: false }
*/
console.log(iterator.next()) // 第一次输出 /**
* 第二次输出结果
* { value: 2, done: false }
*/
console.log(iterator.next()) // 第二次输出 /**
* 第三次输出结果
* numbers
* { value: 3, done: false }
*/
console.log(iterator.next()) // 第三次输出 /**
* 第四次输出结果
* { value: 'delegate', done: true }
*/
console.log(iterator.next()) // 第四次输出

输出结果描述

  1. 第三次输出时,输出两行内容。第一行内容为 delegate 函数中 console.log(str) 输出的,值为 numbers 函数的返回值。
  2. 第四次输出时,输出一行内容,其中的 value 值为 delegate 函数的返回值。此时,done 属性为 true。

扩展阅读

理解 ES6 语法中 yield* 关键字的作用的更多相关文章

  1. 理解 ES6 语法中 yield 关键字的返回值

    在 ES6 中新增了生成器函数的语法,本文解释了生成器函数内 yield 关键字的返回值. 描述 根据语法规范,yield 关键字用来暂停和继续执行一个生成器函数.当外部调用生成器的 next() 方 ...

  2. 【转载】理解C语言中的关键字extern

    原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻 ...

  3. 【Java_基础】Java中Native关键字的作用

    本篇博文转载与:Java中Native关键字的作用

  4. C#中yield关键字理解

    yield关键字之前用得较少,但是在做项目开发的过程中也遇到了,当时有点迷惑,就顺便研究学习了一下,以下是个人理解,不到之处欢迎拍砖!废话就到这,上代码: class Program { static ...

  5. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  6. C# 中yield关键字解析

    前言 前段时间了解到yield关键字,一直觉得还不错.今天给大家分享一下yield关键字的用法.yield return 返回集合不是一次性返回所有集合元素,而是一次调用返回一个元素.具体如何使用yi ...

  7. java中final 关键字的作用

    final 关键字的作用 java中的final关键字可以用来声明成员变量.本地变量.类.方法,并且经常和static一起使用声明常量. final关键字的含义: final在Java中是一个保留的关 ...

  8. Java中volatile关键字及其作用是什么?

    在 Java 多线程中如何保证线程的安全性?那我们可以使用 Synchronized 同步锁来给需要多个线程访问的代码块加锁以保证线程安全性.使用 synchronized 虽然可以解决多线程安全问题 ...

  9. Java 中 volatile 关键字及其作用

    引言 作为 Java 初学者,几乎从未使用过 volatile 关键字.但是,在面试过程中,volatile 关键字以及其作用还是经常被面试官问及.这里给各位童靴讲解一下 volatile 关键字的作 ...

随机推荐

  1. fiddler数据过滤功能

    设置会话过滤的菜单如下图: 1.勾选Use Filters选项表示使用过滤设置,不勾选则不使用 2.Actions:有四个选项 Run Filterset now:立即运行过滤设置: Load Fil ...

  2. 传统IDC 部署网站

    选择IDC机房 1.选择云主机. 2.传统IDC a购买服务器 b服务器托管 c装系统 装系统 虚拟机软件 vmware workstation virtualbox hyper-v 下载:r.ami ...

  3. vue和react之间的区别

    1.Vue和React之间的区别 相同点: Vue和其他框架一样,都有组件开发和虚拟dom 都支持props进行父子组件之间的数据通信 都支持数据驱动视图,不直接操作真实dom 都支持服务器端的 渲染 ...

  4. 【hbase】hbase的shell操作笔记

    HBase Shell $ ./bin/hbase shell # 进入交互界面 DDL操作: create:创建表(默认命名空间为default) # create '表名','列族1','列族2' ...

  5. 2013.6.22 - OpenNE第二天

    果然看中文材料就比较顺利,才半个小时就看完了一篇非常简单的综述<命名实体识别研究进展综述>(孙镇.王惠临).这个是2010年的文章,其实就是一个 科普文章,简述了国内外NER这块的历史如何 ...

  6. 思想家:一个http接口的设计

    一个简单的接口,反应出来一些简单的思想. auth_token= xxx post  response (命令) 记住:我们是给第3方提供接口,不是自己使用 问题:平时就知道写代码,文档重视不够,有一 ...

  7. 《你说对就队》第八次团队作业:Alpha冲刺 第三天

    <你说对就队>第八次团队作业:Alpha冲刺 第三天 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...

  8. HihoCoder1236 Scores

    Scores 求五维偏序(≤).强制在线. \(n,q\le 50000\) 烂大街的题解 考虑如果我们能用bitset找到每一维有哪些比询问点小,然后把每一维的结果取交集,得到的就是答案了. 然后对 ...

  9. NOIP2018模板总结【数学】

    质因数分解 //质因数分解 int prime[MAXN], tim[MAXN], cnt; void Divide(int N) { printf("%d = ", N); fo ...

  10. car购车翻译篇

    Sedans 4门轿车 si 运动型车,通常匹配6挡位变速箱 Coupes 双门,有少少跑车的含义 Hatchbacks 掀背   配置英语 Honda Sensing® Standard 感应标准, ...