以下是我的示例代码:
function *g() {
while (true) {
console.log(yield)
}
}
var gen = g();
gen.next(3); // {value: undefined, done:false}
gen.next(3); // 3 {value: undefined, done:false}
gen.next(3); // 3 {value: undefined, done:false}
为什么传递给第一个next()
函数的第一个参数不起作用?为什么value属性的值是undefined
,它不应该是传入的参数值吗?
答案 0 :(得分:2)
这是发电机中发生的事情。
第一次调用初始化生成器(并返回迭代器),不运行任何内部代码。
从那时起,迭代器上对.next(value)
的每次调用都会传递从当前暂停的value
返回的yield
并继续执行到下一个yield
(或函数结束),返回yield
- ed(或返回)值。
现在,第一个yield
来电时暂停的.next
是什么?没有一个,我们从函数的顶部开始执行。
因此,无论您在第一次undefined
调用中传递什么,它的第一个值都是next
。
至于yield
- ed值为undefined
,您得到的是yield
。
function *g() {
yield; // yields undefined
yield 3;
yield 'a';
}
for (const v of g()) {
console.log(v);
}