美文网首页
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中函数后面带个*号是啥意思?

    我们可能见过长成这样的函数 这个函数是不是有点奇怪? 关键字function后面还跟着一个*号,函数内部有很多yi...

  • javascript 函数后面有多个小括号是怎么回事?f( )(

    有时我们看见js函数后面跟着多个小括号是怎么回事?f( )( )( )... f()意思是执行f函数,返回子函数 ...

  • javascript (柯里化)函数后面有多个小括号

    有时我们看见js函数后面跟着多个小括号是怎么回事?f( )( )( )... f()意思是执行f函数,返回子函数 ...

  • this

    this在js中主要研究的是函数中的this,不代表函数外没有this,函数外的this指向window js中的...

  • 小程序笔记整合

    1:js文件中,每个函数写完末尾必须有“,”号,不然会报错,最后一个函数不用“,” 2:修改了js文件的话,需要清...

  • 前端面试题(持续补充)

    js,node.js基础: 闭包 闭包是能够读取其他函数内部变量的函数。在js中,只有函数内部的子函数可以访问内部...

  • 7.13

    js语句基本规则 1.语句后面要用分号结束; 函数后面不用加,for循环后面不用加,if条件后面不用加 var a...

  • 函数如何在 JS 中是一等公民

    所谓一等公民,就是指函数在 JS 中可以作为变量,函数参数,函数返回值。 JS 中函数是一种特殊的对象。函数与对象...

  • JS中的this

    JS中的this 众所周知,JS中this的代表的是当前函数调用者的上下文。JS是解释性的动态类型语言,函数在调用...

  • 2018-07-09

    JS匿名函数理解 匿名函数的基本形式为(function(){...})();前面的括号包含函数体,后面的括号就是...

网友评论

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

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