JavaScript ES6 新特性之 Generator
(昨天晚上喝多了没更新,6瓶雪花淡爽,我就醉了~~)
今儿个学习下ES6 的生成器 Generator,这玩艺的名字挺唬人的,我刚一看的时候还以为能for循环似的批量生成函数了呢。。
结果细一看根本不是这么回事
先说下用途,它是用来搞定异步编程的编写方式的,以前都是嵌套式的,用了它就可以搞成顺序着写的了。
但,就像我以前说过的,其实就是换了个写法。
当然这是我个人的偏见,我的见识有限导致我目前这样认为。
来看看代码哈,先说现在的写法:
function fn1(a,b){
var aa = a+b;
console.log(aa);
var bb = a*b;
console.log(bb);
var cc = a-b;
console.log(cc);
}
调用后,以下输出
fn1(4,2);
//6
//8
//2
注意,6,8,2是一次输出的喔。
说到这里,我们要强调一下,函数这个东西,只有“调用”或“未被调用”的二种情况。没有某个函数“用了一半”的情况,函数不带刹车的。
这个时候吧,Generator,就出场了。
怎么用呢,
看代码,改成这样:
var fn1 = function* (a,b){
var aa = a+b;
yield console.log(aa);
var bb = a*b;
yield console.log(bb);
var cc = a-b;
yield console.log(cc);
}
加个星号,再加个yield就行,它就是Generator对象了,这个对象具有一个next方法,怎么用接着往下看。
然后执行下:
var gg = fn1(4,2);
gg.next();//6
然后这个函数就停止执行了,踩了刹车了。
gg.next();//8
然后这个函数就停止执行了,踩了刹车了。
gg.next();//2
然后整个函数执行完了。
到这里,相信读者同学已经看出Generator有啥用了。它要发挥作用,最好是和yield一起用。
yield官方定义是切割逻辑,其实我看它就是暂停键。
Generator的next属性就是油门,一调用它就继续执行了。
Generator和yield一起用,就是把一整个函数给切割成了几个部份了,然后这几个部份还共用使用一个this。
其实一个大函数里放几个小函数,形成一个大闭包,然后分别调用也能达到Generator、yield、next的效果。
但在代码量上,大闭包的代码量和结构,就比较“感人”了。就没有Generator这么舒爽了。
它在解决异步调用方面的比较有用,例如nodeJs的各个调用场景。
目前各个浏览器它的支持还是比较有限,但对于这种新技术还是要保持适当的跟踪和关注。
- 【go语言】Goroutines 并发模式(一)
- 【go语言】Goroutines 并发模式(二)
- 从零开始搭建Nginx和Tomcat的web集群环境
- 【翻译】为什么 goroutine 的栈内存无穷大?
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇终结(第3子篇)
- goroutine背后的系统知识
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第2子篇)
- 2017最后一天的学习-TensorFlow
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第1子篇)
- 36小时,造一个亚马逊无人商店 | 实战教程+代码
- 使用Echarts来实现数据可视化
- 手把手教你用TensorFlow实现看图说话 | 教程+代码
- 自动化平台开发的几点总结
- epoll入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 超实用的android自定义log日志输出工具类
- spring进行mock测试
- RecyclerView实现纵向和横向滚动
- Android ListView列表视图的使用方法
- 滴滴自动化运维平台夜莺实战部署
- Android UI使用HorizontalListView实现水平滑动
- python操作yaml说明
- python由已知数组快速生成新数组的方法
- Git 修改已提交 commit 的信息
- 解决windows下python3使用multiprocessing.Pool出现的问题
- 解决pyqt5异常退出无提示信息的问题
- TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
- 来来来,让咱重新认识一下算法的复杂度!
- 带你通过字节跳动面试---操作系统复习
- Java 8 中的接口和抽象类到底有啥区别?