Meh*_*ash 5 javascript loops ecmascript-6 for-of-loop
因此,有一些方法可以停止循环中的生成器for of,但是如何break向生成器发送信号(与returnin相比for-of)?
请考虑代码。
例如,前面的代码只是将值从 1 增加到 10,并在中间进行暂停和恢复。
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." );
}
}
Run Code Online (Sandbox Code Playgroud)
它通过使用循环 10 次for of:
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
}
}
Run Code Online (Sandbox Code Playgroud)
it.return()顺便说一句,当使用 时,实现的clear( 是主对象并且已经获得了控制权,但是?);it呢?break
\n\n\n如何
\nbreak向生成器发送信号?
循环将调用IteratorClose操作,这基本上相当于调用.return()不带参数的迭代器方法(如果迭代器对象有这样的方法)——生成器就是这样做的。\n当循环体中的throworreturn语句被求值时,也会发生这种情况。
\n\n\n\n
it.return()顺便什么时候用,实现就清楚了
\xe2\x80\xa6但是太可怕了。正如您所发现的,它不会立即停止。这是因为方法调用只是推进生成器并从中返回一些结果,但与循环无关。循环体将继续执行,直到再次评估循环条件为止,然后循环体将检查迭代器并注意到它已经完成。
\n| 归档时间: |
|
| 查看次数: |
2104 次 |
| 最近记录: |