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 相关文章推荐
自动完成JS类(纯JS, Ajax模式)
Mar 12 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
js用typeof方法判断undefined类型
Jul 15 Javascript
JS跨域问题详解
Nov 25 Javascript
Jquery简单实现GridView行高亮的方法
Jun 15 Javascript
JS模拟实现方法重载示例
Aug 03 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
Sep 28 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
Dec 18 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
Sep 20 Javascript
React父子组件间的传值的方法
Nov 13 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 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比较操作符的安全问题
2015/12/03 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
node.js实现快速截图
2016/08/27 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
python网络编程实例简析
2014/09/26 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python使用str & repr转换字符串
2016/10/13 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
pandas object格式转float64格式的方法
2018/04/10 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
大队委竞选演讲稿
2014/04/28 职场文书
运动会的口号
2014/06/09 职场文书
科技节口号
2014/06/19 职场文书
2014年资料员工作总结
2014/11/18 职场文书
食品质检员岗位职责
2015/04/08 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python