我在MDN上偶然发现了生成器函数,让我感到困惑的是以下示例:
function* logGenerator() {
console.log(yield);
console.log(yield);
console.log(yield);
}
var gen = logGenerator();
// the first call of next executes from the start of the function
// until the first yield statement
gen.next();
gen.next('pretzel'); // pretzel
gen.next('california'); // california
gen.next('mayonnaise'); // mayonnaise
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么作为yield参数的语句console.log返回传递给.next()生成器方法的参数.这是否发生是因为空yield必须返回.next()方法的第一个参数的值?
我还尝试了一些例子,似乎证实了上述陈述:
gen.next(1,2,3); // the printed value is 1, the 2 and 3 are ignored
// and the actual yielded value is undefined
Run Code Online (Sandbox Code Playgroud)
还有一种方法可以访问.next()生成器函数体内的方法的其他参数吗?
我注意到的另一件事是,当yield语句将这些值返回到console.log它们时,它们实际上不会作为生成器的输出而产生.我必须说我觉得很困惑.
小智 4
很好的问题。我认为阅读 MDN 上关于该.next()方法的内容是最有帮助的。您可以在生成器函数本身(即)中定义要传递的值,或者通过以下方式yield 1传递值:next()gen.next(1)
该next()方法本身返回一个对象,其中包含属性value和一个布尔值done,该布尔值表示生成器函数是否完整(即耗尽可用输出,现在仅输出undefined一个值)。
也就是说,有两种方法可以访问/传递它value。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |