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工具_Form 封装
Aug 21 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
Oct 19 Javascript
动态加载jquery库的方法
Feb 12 Javascript
jQuery实现Email邮箱地址自动补全功能代码
Nov 03 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
javascript实现非常简单的小数取整功能示例
Jun 13 Javascript
vue axios请求超时的正确处理方法
Apr 02 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
May 01 Javascript
Vue中使用的EventBus有生命周期
Jul 12 Javascript
微信公众号H5支付接口调用方法
Jan 10 Javascript
微信小程序定义和调用全局变量globalData的实现
Nov 01 Javascript
微信小程序scroll-view的滚动条设置实现
Mar 02 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操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
jQuery Ajax 实例全解析
2011/04/20 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
高校生生产实习自我鉴定
2013/09/21 职场文书
英语系毕业生自荐信
2013/10/31 职场文书
阿德的梦教学反思
2014/02/06 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python