前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >function*/生成器函数

function*/生成器函数

作者头像
gojam
发布2019-05-14 12:07:32
2.3K0
发布2019-05-14 12:07:32
举报
文章被收录于专栏:gojam技术备忘录

function*语句允许你声明一个生成器函数,这种函数的返回值是一个Generator对象,它允许你控制函数的暂停、继续执行。这种同步操作允许我们使用JavaScript的异步编程——function*每次只返回一个特殊的指针,并不直接真正地返回值,因此function*内外的代码可以同时执行。

代码语言:javascript
复制
function* generator(param,...)
{
...
yield ...
}

异步执行

代码语言:javascript
复制
function* add(inc){
inc++
yield inc++
yield inc++
}
let f=add(10)
f.next()//inc==11 { value: 11, done: false }
f.next()//inc==12 { value: 12, done: false }
f.next()//inc==13 { value: undefined, done: true }

遇到yield时函数会暂停执行后面的代码,直到next()方法被调用,该方法的返回值包括表达式的结果和完成状态。使用函数生成器时函数不会执行,因此需要使用一次next()。

上文的程序为什么到最后变成undefined呢?这是因为每次next()都会执行到yield关键字后的表达式处,并且将yield后的表达式结果作为value返回。而add函数内只有两个yield,虽然三次调用next()才能完成调用过程,但最后一次不返回value,在函数末尾加上return语句就能让next返回return后的表达式值。值得一提的是,函数生成器返回的是Generator对象,但这不影响在函数生成器内使用return。

为什么value=11和12,不应该12和13吗?inc++实际上是先返回inc再+1,这里就是inc++和++inc的差别。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年3月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 异步执行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档