generator ???
一直以为只是用来处理异步操作的,其实generator+yield只是一个会暂停的函数
function* next_id() {
var current_id = 0;
while(current_id < 100){
current_id++;
yield current_id;
}
return; //一定要记得return,return是generator函数的结束符
}
开始编译:
var a = next_id();
函数并没有开始执行
a.next()
var current_id = 0;
current_id++;
yield current_id; //返回 {value: 1, done: false}
//现在我知道currentid是1了,但是呢yield还没有结束,因为while还在循环
a.next();
current_id++;
yield current_id;//返回 {value: 2, done: false}
//现在我知道currentid是2了,但是呢yield还没有结束,因为while还在循环
走啊走,终于走完了所有的yield,走出了while
遇到了return; done变为true
全剧终……
for of 遍历generator对象
在MDN遇到的另一个例子:
function* foo(){
yield 1;
yield 2;
}
for (let o of foo()) {
console.log(o);
// expected output: 1
break; // closes iterator, triggers return
}