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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
JQuery 前台切换网站的样式实现
Jun 22 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
May 09 Javascript
jfinal与bootstrap的登录跳转实战演习
Sep 22 Javascript
深入理解Javascript中的自执行匿名函数
Jun 03 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
详解vue.js的devtools安装
May 26 Javascript
webpack构建react多页面应用详解
Sep 15 Javascript
webpack-dev-server自动更新页面方法
Feb 22 Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 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获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
教大家制作简单的php日历
2015/11/17 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python super用法及原理详解
2020/01/20 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
单位工作证明格式模板
2014/10/04 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
2016十一国庆节感言
2015/12/09 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
Windows7下FTP搭建图文教程
2022/08/05 Servers