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个赞
啥话都不说,看一下执行逻辑。
申明g变量
申明Generator函数gen
g变量赋值gen(1)
gen函数内部申明了变量y; 然后函数被yield暂停
g的next
执行x+2,并返回继续暂停
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; }
添加回答
举报
0/150
提交
取消