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 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
jQuery实现的简单提示信息插件
Dec 08 Javascript
JavaScript中点击事件的写法
Jun 28 Javascript
JavaScript代码执行的先后顺序问题
Oct 29 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
详解js实时获取并显示当前时间的方法
May 10 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
基于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
基于Zend的Captcha机制的应用
2013/05/02 PHP
Smarty3配置及入门语法
2017/02/22 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
JavaScript多线程的实现方法
2007/05/08 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
Python模拟随机游走图形效果示例
2018/02/06 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
工商企业管理应届生求职信
2013/11/03 职场文书
店长岗位的工作内容
2013/11/12 职场文书
卫校护理专业毕业生求职信
2013/11/26 职场文书
关于旷工的检讨书
2014/02/02 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
行政处罚告知书
2015/07/01 职场文书
谢师宴学生致辞
2015/07/27 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
Oracle 死锁的检测查询及处理
2021/09/25 Oracle