深入理解js generator数据类型


Posted in Javascript onAugust 16, 2016

1. 概述

generator 是ES6引入的新的数据类型, 看上去像一个函数,除了使用return返回, yield可以返回多次。

generator 由function* 定义, (注意*号),

2. 例子

函数无法保存状态, 有时需要全局变量来保存数字;

2.1

'use strict';

function next_id(){
  var id = 1;
  while(id<100){
   yield id;
   id++;
  }
  return id;
}

// 测试:
var
  x,
  pass = true,
  g = next_id();
for (x = 1; x < 100; x ++) {
  if (g.next().value !== x) {
    pass = false;
    alert('测试失败!');
    break;
  }


}
if (pass) {
  alert('测试通过!');
}

2.2 一个无限循环的迭代器

function* idMaker(){
  var index = 0;
  while(true)
    yield index++;
}

var gen = idMaker(); // "Generator { }"

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2

2.3Generator.prototype.next()

当迭代结束时, Generator.next().done ===true, 结束之前 ===false

function* gen() { 
 yield 1;
 yield 2;
 yield 3;
}

var g = gen(); // "Generator { }"
g.next();   // "Object { value: 1, done: false }"
g.next();   // "Object { value: 2, done: false }"
g.next();   // "Object { value: 3, done: false }"
g.next();   // "Object { value: undefined, done: true }"

2.4 Generator.prototype.return();

return方法 返回给定的参数值,并结束迭代器

example

function* gen() { 
 yield 1;
 yield 2;
 yield 3;
}

var g = gen();

g.next();    // { value: 1, done: false }
g.return("foo"); // { value: "foo", done: true }
g.next();    // { value: undefined, done: true }

注意 如果 done的值是true了, 再调用return,返回的值也是undefined

function* gen() {yield 1;}
var g = gen();
console.log(g.next());//{ value: 1, done: false }
console.log(g.next());//{ value: undefined, done: true }
console.log(g.return(1)); //{ value: undefined, done: true }

2.5 Generator.prototype.throw()

thorw()方法, 通过抛出一个异常到迭代器中,来重新获得迭代器的执行;

返回 带有 value和done两个属性的object对象

function* gen() {
 while(true) {
  try {
    yield 42;
  } catch(e) {
   console.log("Error caught!");
  }
 }
}

var g = gen();
var a = g.next();
// { value: 42, done: false }
var b = g.throw(new Error("Something went wrong"));
// "Error caught!"
// { value: 42, done: false }
console.log(a);
console.log(b.value+"::"+b.done);

以上这篇深入理解js generator数据类型就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
很全的显示阴历(农历)日期的js代码
Jan 01 Javascript
js 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
jQuery1.6 使用方法二
Nov 23 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
Jul 26 Javascript
jQuery简单实现日历的方法
May 04 Javascript
分享纯手写漂亮的表单验证
Nov 19 Javascript
JavaScript字符集编码与解码详谈
Feb 02 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
JS实现json数组排序操作实例分析
Oct 28 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
js 创建对象 经典模式全面了解
Aug 16 #Javascript
js 上传文件预览的简单实例
Aug 16 #Javascript
js removeChild 方法深入理解
Aug 16 #Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 #Javascript
总结Node.js中的一些错误类型
Aug 15 #Javascript
自动化测试读写64位操作系统的注册表
Aug 15 #Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 #Javascript
You might like
PHP集成FCK的函数代码
2008/09/27 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP会话控制实例分析
2016/12/24 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python中的列表与元组的使用
2019/08/08 Python
numpy.array 操作使用简单总结
2019/11/08 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
毕业生自荐信
2013/12/14 职场文书
机关单位动员会主持词
2014/03/20 职场文书
双方协议书
2014/04/22 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
vue+spring boot实现校验码功能
2021/05/27 Vue.js