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 相关文章推荐
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
JS中toFixed()方法引起的问题如何解决
Nov 20 Javascript
单元选择合并变色示例代码
May 26 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
Mar 11 Javascript
JavaScript使用yield模拟多线程的方法
Mar 19 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
Mar 30 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
深入浅析JavaScript中with语句的理解
May 12 Javascript
ES6学习教程之对象的扩展详解
May 02 Javascript
Vue 表情包输入组件的实现代码
Jan 21 Javascript
vue 组件内获取actions的response方式
Nov 08 Javascript
TypeScript 运行时类型检查补充工具
Sep 28 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php fckeditor 调用的函数
2009/06/21 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
js调用css属性写法
2013/09/21 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
python进行文件对比的方法
2018/12/24 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
Python selenium自动化测试模型图解
2020/04/15 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
美国高街时尚品牌:OASAP
2016/07/24 全球购物
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
计算机应用专业推荐信
2013/11/13 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
社区消防工作实施方案
2014/03/21 职场文书
信仰心得体会
2014/09/05 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
档案工作个人总结
2015/03/03 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
MySQL8.0的WITH查询详情
2021/08/30 MySQL
python保存图片的四个常用方法
2022/02/28 Python