JS中函数后面带个*号是啥意思?
我们可能见过长成这样的函数
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的区别
- 每次遇到yield函数会暂停执行,下一次会从当前位置继续向后执行;而return语句不行
- 一个函数中只能执行一次return,而yield会执行多次
- 正常函数只能return回一个值,而Generator函数可以返回一些列值,因为可以有多条yield语句
总结
本篇文章简单的介绍了Generator函数,简单总结强调:
Generator函数其实就像是一个分段执行的函数,yeild语句就是暂停的标志,而next方法可以恢复执行
使用next方法可以得到不同状态下的返回值
最后 🙌
好啦,以上就是我本次分享的全部内容啦,如果你觉得我的文章对你有一丢丢帮助,那么请不要吝啬你的赞👍哦,阿门~