Generator 是一个特殊的函数,执行它会返回一个Iterator对象。通过遍历迭代器,Generator函数运行后悔返回遍历器对象,而不是函数的返回值。

Iterators模拟

迭代器有一个next方法,每次执行的时候会返回一个对象 对象里面有两个函数,一个是value表示返回的值,还有就是布尔值done,表示是迭代完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function buy(books){
let i = 0;
return{
next(){
let done = i ===books.length;
let value = !done ? books[i++]:undefined;
return {
value:value,
done:done
}
}
}
}

let iterators = buy(['js','html']);
var curr;
do{
curr = iterators.next();
console.log(curr);
}while(!curr.done);

Generators

生成器用于创建迭代器

1
2
3
4
5
6
7
8
9
10
11
function* buy(boos){
for(var i=0;i<boos.length;i++){
yield books[i];
}
}
let buying = buy(['js','html]);
var curr;
do {
curr = buying.next();
console.log(curr);
}while(!curr.done);