为了账号安全,请及时绑定邮箱和手机立即绑定

学习generator函数中,yield的使用的疑惑

学习generator函数中,yield的使用的疑惑

LEATH 2018-08-26 16:27:05
function* gen(x){  var y = yield x + 2;  console.log(typeof y);  return y; }var g = gen(1); g.next() // { value: 3, done: false }g.next() // undefined { value: undefined, done: true }我想问的是为什么这里的y没有得到值我的理解是第一步g.next()执行x + 2第二步 执行 y = x + 2 这里似乎是错了如果我希望y 可以得到x+2的值应该怎么做呢?
查看完整描述

1 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

啥话都不说,看一下执行逻辑。

  1. 申明g变量

  2. 申明Generator函数gen

  3. g变量赋值gen(1)

    gen函数内部申明了变量y;
    然后函数被yield暂停
  4. g的next

    执行x+2,并返回继续暂停
  5. g的next

    y赋值一个unlined。注意!!yield是函数的暂停标记,返回当前计算结果给调用者,不会传值给当前上下文里的任何人!
    然后console typeof y
    然后return y,并终止了Generator 函数

    // ...

想达到效果应该这样写

function* gen(x){  var y;  yield y = x + 2;  console.log(typeof y);  return y;
}


查看完整回答
反对 回复 2018-10-27
  • 1 回答
  • 0 关注
  • 690 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信