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 相关文章推荐
javaScript对象和属性的创建方法
Jan 15 Javascript
js正则表达exec与match的区别说明
Jan 29 Javascript
Jquery操作js数组及对象示例代码
May 11 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
基于jQuery实现的扇形定时器附源码下载
Oct 20 Javascript
bootstrap基础知识学习笔记
Nov 02 Javascript
原生JS中slice()方法和splice()区别
Mar 06 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
Sep 20 Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 Javascript
微信小程序实现图片选择并预览功能
Jul 25 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 Javascript
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
php 文章采集正则代码
2009/12/28 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
header导出Excel应用示例
2014/01/24 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
js实现继承的5种方式
2015/12/01 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
python实现xml转json文件的示例代码
2020/12/30 Python
信用卡逾期证明示例
2014/09/13 职场文书
工作证明英文模板
2014/10/21 职场文书
个人创业事迹材料
2014/12/30 职场文书
公司放假通知怎么写
2015/04/15 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
如何使用pdb进行Python调试
2021/06/30 Python
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android