ES6之Generator(3)知识点总结(十)

news/2024/7/10 22:54:48 标签: ES6, Generator, yield*

记笔记,主要是为了提高学习效率,避免只看不动手,领略不到书的精髓,忽略到书中的重点知识,本文学习主要是根据阮一峰大神走的,很感谢阮一峰大神的无私奉献。如果想要了解更详细的关于本节的内容可以看阮一峰大神的ES6官网http://es6.ruanyifeng.com/#docs/generator

yield*表达式

如果在Generator函数内部调用另一个Generator函数,默认情况是没有效果的。这个就需要用到yield*表达式,用来在一个Generator函数里面执行另一个Generator函数。

var g = function *(){
    yield "leo";
    yield "lalalal";

}
var p = g();
var g2 = function * (){
    yield "donna";
    yield* p;
    yield "henory";
}
var p2 = g2();
console.log(p2.next());//{ value: "donna", done: false }
console.log(p2.next());//{ value: "leo", done: false }
console.log(p2.next());//{ value: "lalalal", done: false }
console.log(p2.next());//{ value: "henory", done: false }
console.log(p2.next());//{ value: "undefined", done: true }

注意:如果yield表达式后面跟的的是一个遍历器对象,需要在yield表达式后面加上星号,表明它返回的是一个遍历器对象,这被称为yield*表达式。

yield*表达式后面的Generator函数(没有return语句时),等同于在Generator函数内部,部署一个for...of循环。

如果yield*表达式后面的Generator函数有return语句时,需要用var value = yield* iterator 的形式获取return语句的值

var g = function *(){
    yield "leo";
    yield "lalalal";
    return "over";

}
var p = g();


var g2 = function * (){
    yield "donna";
   var value = yield*p;
  // console.log(value);
    yield "henory";
}
var p2 = g2();
console.log(p2.next());
console.log(p2.next());
console.log(p2.next());
console.log(p2.next());
console.log(p2.next());
//{ value: "donna", done: false }
//{ value: "leo", done: false }
//{ value: "lalalal", done: false }
// over
//{ value: "henory", done: false }
//{ value: "undefined", done: true }

如果yield*后面跟着一个数组,由于数组原生支持遍历器,因此就会遍历数组成员,如果yield表达式后面跟一个数组,返回的是整个数组
var g2 = function * (){
    yield "donna";
   yield* ["leo","momo"];
   yield [1,2,3];
    yield "henory";
}
var p2 = g2();
console.log(p2.next());//{ value: "donna", done: false }
console.log(p2.next());//{ value: "leo", done: false }
console.log(p2.next());//{ value: "momo", done: false }
console.log(p2.next());//{ value: [1,2,3], done: false }
console.log(p2.next());//{ value: "henory", done: false }
实际上,任何数据结构只要有Iterator接口,就可以被yield*遍历。(数组、类数组、字符串、Map数据结构、Set数据结构)

如果一个对象的属性是Generator函数,可以在这个属性的前面加星号,表示这个属性是一个Generator函数

Generator函数不能跟new命令一起用,会报错。


http://www.niftyadmin.cn/n/952072.html

相关文章

SqlDataAdapter的几种常用方法

SqlDataAdapter的几种常用方法。主要代码例如下所示:SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 其它 属性,使数据的加载和更新更加方便。 DataSet 增加/更新/插入到数据库public static SqlDataAdapter CreateCustomerAdapter(Sq…

tensorrt轻松部署高性能dnn推理_教程|教你采用基于TensorRT的BERT模型实现实时自然语言理解...

点击上方“公众号”可以订阅哦为了打造更具准确性的自然语言理解AI,如今已经有了诸如BERT、GPT-2和XL-Net等大规模语言模型被相继推出,这些模型的出现为打造各类自然语言理解(NLU)带来了飞跃性的突破。自2018年10月发布以来,BERT依旧是最常用…

ASP.NET AJAX(开发代号Atlas)重要参考资源大收集

英文网站部分 http://www.google.com 或者http://search.msn.com :不必多说 ASP.NET AJAX官方网站:不用多说了…… ASP.NET AJAX Control Toolkit官方网站:同样不必多说…… 官方参考文档:必备资料,虽然现在还不是很全…

ES6之Generator函数(4)知识点总结(十一)

Generator函数的数据交换和错误处理。Generator函数可以暂停执行和恢复执行,这是它能封装异步任务的根本原因。除此之外,它还有两个特性,使他可以作为异步编程的完整解决方案:函数体内的数据交换和错误处理机制。next返回值的valu…

Ajax.NET 和 Atlas 区别

Ajax.NET是一款免费的面向.Net的Ajax LibraryAtlas是微软提供给开发者的Ajax开发包两者都可以让ASP.Net具备Ajax功能 近日,利用空闲时间把这两个东西做了不完全的比较1、代码量由于两者通过不同途径实现Ajax,所以代码的量也是不相同的,下面我…

anaconda新建python2环境安装不了jupyterlab_Anaconda+pycharm(jupyter lab)搭建环境

之前先是安装了pycharm,手动安装了python2.7和3.7版本,在pycharm里面使用alt/手动下载包。后来想使用jupyter lab,手动下载包太麻烦且有版本管理的文艺,于是打算装Anaconda。anaconda里面集成了包括python在内的很多工具&#xff…

ES6之async函数(1)知识点总结(十二)

每天集中精力学一会ES6,效果还是蛮好的,嗯,跟着阮一峰大神学功夫喽,如果你也见识见识阮一峰大神的神功,请点击http://es6.ruanyifeng.com/#docs/async async函数的写法和语法: 1、async函数就是将Generator…

.net事务

.net中的4种事务总结 在一个MIS系统中,没有用事务那就绝对是有问题的,要么就只有一种情况:你的系统实在是太小了,业务业务逻辑有只要一步执行就可以完成了。因此掌握事务处理的方法是很重要,进我的归类在.net中大致有以下4种事务处理的方法。大家可以参考…