ES6生成器用法实例分析


Posted in Javascript onApril 10, 2017

本文实例讲述了ES6生成器用法。分享给大家供大家参考,具体如下:

语法

何为生成器?让我们先看看以下代码:

function* quips(name) {
 yield "hello " + name + "!";
 yield "i hope you are enjoying the blog posts";
 if (name.startsWith("X")) {
  yield "it's cool how your name starts with X, " + name;
 }
 yield "see you later!";
}

你没有看错,这就是JavaScript代码。是不是和你曾经认识的javascript不太一样。这个函数就叫做生成器函数。生成器函数看起来和普通的函数是不是有点相像呢?

它们的区别如下:

一般的函数以function开头,而生成器函数以function* 开头

生成器函数中有一个特殊关键字就是yield,作用就是暂停函数。配合next方法来调用可以达到一步一步的执行函数的目的

我们看看next方法的使用:

> var iter = quips("lf");
 [object Generator]
> iter.next()
 { value: "hello lf!", done: false }
> iter.next()
 { value: "i hope you are enjoying the blog posts", done: false }
> iter.next()
 { value: "see you later!", done: false }
> iter.next()
 { value: undefined, done: true }

可以看到,每一次next方法后,生成器函数就执行到下一个yield位置处。

基本的生成器语法就讲完了。

应用

生成器可以用来异步编程,我在之前的文章中有过介绍,可以参考前面一篇《基于javascript的异步编程实例详解》

但是需要注意的是,生成器并不是用来写异步的,这仅仅是一种hack手段而已。

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
JS实现双击屏幕滚动效果代码
Oct 28 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
Nov 03 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
JS实现页面数据无限加载
Sep 13 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
深入理解ES7的async/await的用法
Sep 09 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
vue组件name的作用小结
May 23 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
如何进行微信公众号开发的本地调试的方法
Jun 16 Javascript
js实现文章目录索引导航(table of content)
May 10 Javascript
基于javascript的异步编程实例详解
Apr 10 #Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 #Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 #Javascript
js实现适配不同的屏幕大小
Apr 10 #Javascript
JS闭包可被利用的常见场景小结
Apr 09 #Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
Apr 08 #jQuery
作为老司机使用 React 总结的 11 个经验教训
Apr 08 #Javascript
You might like
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
javascript Object与Function使用
2010/01/11 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
javascript制作2048游戏
2015/03/30 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
python 并发下载器实现方法示例
2019/11/22 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
学生党员思想汇报范文
2014/01/09 职场文书
村庄绿化方案
2014/05/07 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
趵突泉导游词
2015/02/03 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
围城读书笔记
2015/06/26 职场文书
初中生活随笔
2015/08/15 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB