【发布时间】:2017-07-11 19:54:12
【问题描述】:
所以有一些方法可以在for of 循环中停止生成器,但是break 如何向生成器发送信号(与for-of 中的return 相比)?
请考虑代码。
例如,前面的代码只是将一个值从 1 增加到 10 ,并在其间执行 pause 和 resume。
function *Generator() {
try {
var nextValue;
while (true) {
if (nextValue === undefined) {
nextValue = 1;
}
else {
nextValue++;
}
yield nextValue;
}
}
// cleanup clause
finally {
console.log( "finally has been reached." );
}
}
它使用 for of 循环了 10 次:
var it = Generator();// it gets Generator's iterator
for (var v of it) {
console.log(v);
if (v > 9) {
//it.return("stop");//this is another tool for stopping, but it doesn't stop immediately.
break;
console.log("it won't run");//this line won't run
}
}
顺便用it.return()时,实现就明确了(it是主Object,有控制权,但是break呢?);
【问题讨论】:
-
您正在跳出 for 循环,您希望
break会发生什么? -
你不应该只写“return”吗?退出循环而不是"it.return("stop");",你也在循环中使用了break,它应该跳出循环。
-
不完全确定你在问什么 - 但 Break 用于跳出循环(并继续循环外的任何方法)。 Return 将打破一个方法,而不仅仅是一个循环 - 它可以返回一个值。 Break 不返回值。
-
好的,我会补充一些更清楚的问题。
-
为什么要命名函数
Generator?
标签: javascript loops ecmascript-6 for-of-loop