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中获取出错代码所在文件及行数的代码
Sep 23 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
Dec 30 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
Jan 09 Javascript
用js获取电脑信息(是使用与IE浏览器)
Jan 15 Javascript
jquery利用ajax调用后台方法实例
Aug 23 Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
详解如何实现一个简单的 vuex
Feb 10 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 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
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
如何用js控制css中的float的代码
2007/08/16 Javascript
jQuery EasyUI API 中文文档 搜索框
2011/09/29 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
从Python的源码来解析Python下的freeblock
2015/05/11 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
python Django批量导入不重复数据
2016/03/25 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
索桥的故事教学反思
2014/02/06 职场文书
化妆品促销方案
2014/02/24 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
社区党建工作方案
2014/06/10 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
文明班级申报材料
2014/12/24 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
公司借款担保书
2015/09/22 职场文书
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android