深入理解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 相关文章推荐
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
IE6,IE7下js动态加载图片不显示错误
Jul 17 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
Mar 05 Javascript
jquery操作对象数组元素方法详解
Nov 26 Javascript
js实现类似菜单风格的TAB选项卡效果代码
Aug 28 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
Feb 19 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
vue计算属性+vue中class与style绑定(推荐)
Mar 30 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 Javascript
浅谈Ant Design Pro 菜单自定义 icon
Nov 17 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
日本十大惊悚动漫
2020/03/04 日漫
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
PHP如何将XML转成数组
2016/04/04 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
js 事件小结 表格区别
2007/08/13 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
详解Python3注释知识点
2019/02/19 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
一年级班主任感言
2014/03/08 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
大学生自荐书范文
2015/03/05 职场文书
父母教会我观后感
2015/06/17 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
工作简历的自我评价
2019/05/16 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python