深入理解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 相关文章推荐
FLASH 广告之外的链接
Dec 16 Javascript
javascript 进度条 实现代码
Jul 30 Javascript
js 动态选中下拉框
Nov 26 Javascript
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
jquery中交替点击事件toggle方法的使用示例
Dec 08 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
Dec 19 Javascript
javascript的replace方法结合正则使用实例总结
Jun 16 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
Feb 04 Javascript
JS奇技之利用scroll来监听resize详解
Jun 15 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 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中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python基础之函数用法实例详解
2014/09/10 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
事业单位分类改革实施方案
2014/03/21 职场文书
刑事代理授权委托书
2014/09/17 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
mysql 排序失效
2022/05/20 MySQL
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers