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 相关文章推荐
用jQuery简化JavaScript开发分析
Feb 19 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
JQuery导航菜单选择特效
Apr 11 Javascript
Bootstrap面板(Panels)的简单实现代码
Mar 17 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 Javascript
JS正则表达式验证中文字符
May 08 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
Jun 25 Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 Javascript
ES6数组与对象的解构赋值详解
Jun 14 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
Nov 04 Javascript
JS实现纸牌发牌动画
Jan 19 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和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
python实现xlsx文件分析详解
2018/01/02 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
酒店总经理岗位职责
2014/03/17 职场文书
服装设计专业求职信
2014/06/16 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
刘胡兰观后感
2015/06/16 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
Python3 如何开启自带http服务
2021/05/18 Python