生成器(Generator)与迭代器(Iterator)
read生成器 用来生成迭代器的
function read(books){
let index = 0;
return {
next(){
//只要能取到就为false,取不到值才为true
let done = index==books.length;
let value = done?undefined:books[index++];
return {
value,
done
}
}
}
}
//迭代器可以不停的调用next方法得到一个结果{value,done}
//当done为true的时候就表示取完了
let it = read(['js','node','mysql']);
//it有一个方法叫next,每次调用next都会返回一个结果 {value,done}
let result ;
do{
result = it.next();
console.log(result);
}while(!result.done);
生成器函数和普通函数不一样,返回迭代器,执行的时候也不一样。
生成器函数其实是内部生成了很多个小函数
function *read(books){
console.log('开始')
for(let i = 0; i < books.length; i++){
yield book[i]
}
console.log('结束')
}
let it = read(['js','node'])
let result;
do{
result = it.next()
console.log(result)
}while(!result.done)