前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript ES6 新特性之 Generator

JavaScript ES6 新特性之 Generator

作者头像
web前端教室
发布2018-02-06 11:28:41
7580
发布2018-02-06 11:28:41
举报
文章被收录于专栏:web前端教室web前端教室

(昨天晚上喝多了没更新,6瓶雪花淡爽,我就醉了~~)

今儿个学习下ES6 的生成器 Generator,这玩艺的名字挺唬人的,我刚一看的时候还以为能for循环似的批量生成函数了呢。。

结果细一看根本不是这么回事

先说下用途,它是用来搞定异步编程的编写方式的,以前都是嵌套式的,用了它就可以搞成顺序着写的了。

但,就像我以前说过的,其实就是换了个写法。

当然这是我个人的偏见,我的见识有限导致我目前这样认为。

来看看代码哈,先说现在的写法:

代码语言:js
复制
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);
}

调用后,以下输出

代码语言:js
复制
fn1(4,2);
//6
//8
//2

注意,6,8,2是一次输出的喔。

说到这里,我们要强调一下,函数这个东西,只有“调用”或“未被调用”的二种情况。没有某个函数“用了一半”的情况,函数不带刹车的。

这个时候吧,Generator,就出场了。

怎么用呢,

看代码,改成这样:

代码语言:js
复制
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方法,怎么用接着往下看。

然后执行下:

代码语言:js
复制
var gg = fn1(4,2);
gg.next();//6

然后这个函数就停止执行了,踩了刹车了。

代码语言:js
复制
gg.next();//8

然后这个函数就停止执行了,踩了刹车了。

代码语言:js
复制
gg.next();//2

然后整个函数执行完了。

到这里,相信读者同学已经看出Generator有啥用了。它要发挥作用,最好是和yield一起用。

yield官方定义是切割逻辑,其实我看它就是暂停键。

Generator的next属性就是油门,一调用它就继续执行了。

Generator和yield一起用,就是把一整个函数给切割成了几个部份了,然后这几个部份还共用使用一个this。

其实一个大函数里放几个小函数,形成一个大闭包,然后分别调用也能达到Generator、yield、next的效果。

但在代码量上,大闭包的代码量和结构,就比较“感人”了。就没有Generator这么舒爽了。

它在解决异步调用方面的比较有用,例如nodeJs的各个调用场景。

目前各个浏览器它的支持还是比较有限,但对于这种新技术还是要保持适当的跟踪和关注。

javascript ES6 初次相见

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 web前端教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档