深入理解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获取被勾选的checked(选中)的那一行的3列和4列的值
Jul 04 Javascript
jQuery动画特效实例教程
Aug 29 Javascript
Jquery中基本选择器用法实例详解
May 18 Javascript
JavaScript操作Cookie方法实例分析
May 27 Javascript
javascript实现根据时间段显示问候语的方法
Jun 18 Javascript
js实现卡片式项目管理界面UI设计效果
Dec 08 Javascript
JS自定义混合Mixin函数示例
Nov 26 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
JavaScript实现购物车基本功能
Jul 21 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
JavaScript引用类型RegExp基本用法详解
Aug 09 Javascript
Three.js实现3D机房效果
Dec 30 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+mysql分页代码详解
2008/03/27 PHP
php 动态执行带有参数的类方法
2009/04/10 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
Python中常用的内置方法
2019/01/28 Python
Python自动抢红包教程详解
2019/06/11 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
简单而又朴实的个人求职信分享
2013/12/12 职场文书
工会主席事迹材料
2014/06/03 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
《社戏》教学反思
2016/02/22 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
Docker安装MySql8并远程访问的实现
2022/07/07 Servers