美文网首页
JS中函数后面带个*号是啥意思?

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

作者: 羞羞的王大锤 | 来源:发表于2020-03-15 23:53 被阅读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的区别

    • 每次遇到yield函数会暂停执行,下一次会从当前位置继续向后执行;而return语句不行
    • 一个函数中只能执行一次return,而yield会执行多次
    • 正常函数只能return回一个值,而Generator函数可以返回一些列值,因为可以有多条yield语句

    总结

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

    最后 🙌

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

    相关文章

      网友评论

          本文标题:JS中函数后面带个*号是啥意思?

          本文链接:https://www.haomeiwen.com/subject/zvwiehtx.html