2017-09-20 16 views
0

正如问题所述,将一个值传递给第一个iterator.next()调用是否有意义,还是会被忽略?作为一个例子:在第一次对生成器迭代器的下一次调用中包含一个值是否合理?

function* foo(x) { 
 
    var y = 2 * (yield(x + 1)); 
 
    var z = yield(y/3); 
 
    return (x + y + z); 
 
} 
 

 
var it = foo(5); 
 

 
// note: not sending anything into `next()` here 
 
console.log(it.next()); // { value:6, done:false } 
 
console.log(it.next(12)); // { value:8, done:false } 
 
console.log(it.next(13)); // { value:42, done:true }

通知没有被传递给第一next()的值。然而,在我试图学习的文章中,它继续说道:

但是,如果我们确实将值传递给第一个下一个(..)调用,那么不会发生任何错误。这只是一个抛弃的价值

好的。这就说得通了。但是现在我很想知道是否有一个用例(或者甚至有可能利用),如果传递一个值有一个好处。

文章:https://davidwalsh.name/es6-generators

+0

在* next *调用中传递的参数会替换前一个* yield *表达式返回的值。由于在第一次调用时没有以前的* yield *,所以没有什么可替代的,所以似乎没有包含它的任何用例。 – RobG

回答

0

将它总是被忽略?

Yes.

就是传递一个值有效益的使用情况?

当它简化了其余的代码。在你的榜样,这可能是使用一个循环,而不是写出来的:

const it = foo(5); 
for (let i=11; i<=13; i++) 
    console.log(it.next(i)); 

现在我们传递11进入第一次调用.next即使没有使用任何地方的价值。

相关问题