JS中函数后面带个*号是啥意思?

2020-03-15  本文已影响0人  羞羞的王大锤

我们可能见过长成这样的函数

function* f(){
    yield 'I';
    yield 'love';
    yield 'you';
}

这个函数是不是有点奇怪? 关键字function后面还跟着一个*号,函数内部有很多yield,它们到底代表了啥意思?
其实啊,它是Generator函数

下面我们就来认识一下ES6中的一个新朋友 ——Generator函数

初识Generator函数

Generator函数翻译过来叫生成器函数,简单的说就是函数内部有多个内部状态,使它可以返回一系列的值
从它的样貌上看,它像是一个普通的函数,但是有两个特征:一是function关键字与函数名称中间有个*号;二是函数体内部使用yield语句,用来表示不同的内部状态

Generator函数调用

Generator函数调用的方法和普通函数一样,也是在函数名后面加上一对括号,不同的是,调用Generator函数后,函数并不执行,而是返回一个指向内部状态的指针对象,这个对象就是遍历器对象(Iterator Object),不清楚遍历器的可以先百度学习一下
而如果想获取函数的不同状态的返回值,必须使用next()的方法,调用next()的方法,会在下一个yeild语句(或是return)处停止

function* f(){
    yield 'I';
    yield 'love';
    yield 'you';
}
var say = f();
say.next(); //{value: "I", done: false}
say.next(); //{value: "love", done: false}
say.next(); //{value: "you", done: false}

每执行一次next(),都会返回一个对象,其中value属性就是yeild语句的值,done属性的值代表遍历是否结束

哦哦,Generator函数其实就像是一个分段执行的函数,yeild语句就是暂停的标志,而next方法可以恢复执行

从上面的例子中,你可能会发现yield和return好像有点相似,都能返回表达式的值,但他两也有很大的区别

yield和return的区别

总结

本篇文章简单的介绍了Generator函数,简单总结强调:
Generator函数其实就像是一个分段执行的函数,yeild语句就是暂停的标志,而next方法可以恢复执行
使用next方法可以得到不同状态下的返回值

最后 🙌

好啦,以上就是我本次分享的全部内容啦,如果你觉得我的文章对你有一丢丢帮助,那么请不要吝啬你的赞👍哦,阿门~

上一篇下一篇

猜你喜欢

热点阅读