JavaScript ES6 新特性之 Generator

时间:2022-04-27
本文章向大家介绍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的各个调用场景。

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

javascript ES6 初次相见