JavaScript 生成器中 yield return 值的分辨率
Resolution of yield return value in JavaScript generators
如果我向生成器上的 next
方法提供一个值, 除了 在 yield
关键字右侧提供一个表达式之外, yield
的 return 值是如何解决的?
function* go() {
console.log(yield 'a');
console.log(yield 'b');
}
var g = go();
g.next();
g.next('one');
g.next('two');
输出:
one
two
Object {value: undefined, done: true}
根据输出,它是提供给下一个方法的值,该值用于 return 由 yield
右侧的表达式编辑的值。
编辑:更新代码以更好地反映我的问题。
有两种解释"return value of the yield"。
你可以指表达式 yield 'a'
的值。正如您从输出中看到的那样,它的值为 one
。
或者您可以指传递给 yield
的值,它实际上是来自生成器的 next
方法的 "returned"。您的代码片段并没有真正揭示这一点。尝试:
console.log('next1', g.next());
console.log('next2', g.next('one'));
console.log('next3', g.next('two'));
这样您就可以看到生成器输出的值,应该类似于:
"next1", {value: "a", done: false}
"next2", {value: "b", done: false}
"next3", {value: undefined, done: true}
您可以做的另一件事是在生成器函数的末尾添加一个普通的 return
值,这将是 next3
的 value
。
In light of the output, it is the value supplied to the next method that is used over the value returned by the expression to the right of yield.
提供给 next
方法的值未“用于”yield
右侧的值。提供给 next
的值是 yield
表达式的最终计算结果。总是。 yield
右侧的值是提供给生成器的 消费者 的值。
它是生成器和使用生成器的代码之间的双向通信。
function* go() {
console.log(yield 'a'); // 'one'
console.log(yield 'b'); // 'two'
}
var g = go();
console.log(g.next()); // { value: 'a', done: false }
console.log(g.next('one')); // { value: 'b', done: false }
console.log(g.next('two')); // { value: undefined, done: true }
如果我向生成器上的 next
方法提供一个值, 除了 在 yield
关键字右侧提供一个表达式之外, yield
的 return 值是如何解决的?
function* go() {
console.log(yield 'a');
console.log(yield 'b');
}
var g = go();
g.next();
g.next('one');
g.next('two');
输出:
one
two
Object {value: undefined, done: true}
根据输出,它是提供给下一个方法的值,该值用于 return 由 yield
右侧的表达式编辑的值。
编辑:更新代码以更好地反映我的问题。
有两种解释"return value of the yield"。
你可以指表达式 yield 'a'
的值。正如您从输出中看到的那样,它的值为 one
。
或者您可以指传递给 yield
的值,它实际上是来自生成器的 next
方法的 "returned"。您的代码片段并没有真正揭示这一点。尝试:
console.log('next1', g.next());
console.log('next2', g.next('one'));
console.log('next3', g.next('two'));
这样您就可以看到生成器输出的值,应该类似于:
"next1", {value: "a", done: false}
"next2", {value: "b", done: false}
"next3", {value: undefined, done: true}
您可以做的另一件事是在生成器函数的末尾添加一个普通的 return
值,这将是 next3
的 value
。
In light of the output, it is the value supplied to the next method that is used over the value returned by the expression to the right of yield.
提供给 next
方法的值未“用于”yield
右侧的值。提供给 next
的值是 yield
表达式的最终计算结果。总是。 yield
右侧的值是提供给生成器的 消费者 的值。
它是生成器和使用生成器的代码之间的双向通信。
function* go() {
console.log(yield 'a'); // 'one'
console.log(yield 'b'); // 'two'
}
var g = go();
console.log(g.next()); // { value: 'a', done: false }
console.log(g.next('one')); // { value: 'b', done: false }
console.log(g.next('two')); // { value: undefined, done: true }