深入理解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 相关文章推荐
jQuery select操作控制方法小结
May 26 Javascript
javascript创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 Javascript
在javascript中创建对象的各种模式解析
May 16 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
Angular4实现图片上传预览路径不安全的问题解决
Dec 25 Javascript
vue.js 获取select中的value实例
Mar 01 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
Node.js+Express+Mysql 实现增删改查
Apr 03 Javascript
原理深度解析Vue的响应式更新比React快
Apr 04 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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python图书管理系统
2020/04/05 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
python re模块常见用法例举
2021/03/01 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
管理部部长岗位职责
2013/12/05 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
租赁意向书范本
2014/04/01 职场文书
需求分析说明书
2014/05/09 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
单位租房协议书范本
2014/12/04 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
初中信息技术教学反思
2016/02/16 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书