深入理解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 相关文章推荐
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
Jun 11 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
JavaScript实现打印星型金字塔功能实例分析
Sep 27 Javascript
Dropify.js图片宽高自适应的方法
Nov 27 Javascript
setTimeout时间设置为0详细解析
Mar 13 Javascript
react-router4按需加载(踩坑填坑)
Jan 06 Javascript
JS apply用法总结和使用场景实例分析
Mar 14 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 Javascript
create-react-app开发常用配置教程
Jun 25 Javascript
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与javascript对多项选择的处理
2006/10/09 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
javascript常用方法总结
2015/05/14 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
Node.js Domain 模块实例详解
2020/03/18 Javascript
JS实现密码框效果
2020/09/10 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
Python之文字转图片方法
2018/05/10 Python
matplotlib实现区域颜色填充
2019/03/18 Python
PyTorch中的Variable变量详解
2020/01/07 Python
python将图片转base64,实现前端显示
2020/01/09 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
经典的班主任推荐信
2013/10/28 职场文书
百年校庆节目主持词
2014/03/27 职场文书
家长对老师的评语
2014/04/18 职场文书
青年志愿者活动总结
2014/04/26 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers