generator
生成器对象,用于异步编程,他和yield一起使用
generator的两大开关
yield相当于暂定键
next()相当于播放键
yield next
function* fn() {
yield 'a';
yield 'b';
yield 'a';
yield 'd';
}
var _fn = fn(); //调用函数返回一个迭代器对象
//next()返回的是一个对象{value: 'a',done: false}
//done属性: true还未指向完yield false执行完成 上例中四个都是返回false,要等再次执行next才会返回true
fn.next();//{value: 'a',done: false}
fn.next();//{value: 'b',done: false}
fn.next();//{value: 'c',done: false}
fn.next();//{value: 'd',done: false}
next传参
next中的参数,是将上一次yield的返回值进行覆盖(yield的返回值是undefined)
function* fn {
var _n = 1;
var _v = yield _n + 22;
console.log(_v);//abc
yield ++_n;
yield ++_n;
}
fn.next(); //23
fn.next('abc');// 2 _n的值并没有改变
fn.next();//3
generator循环 for of
function* fn3() {
yield 'a';
yield 'b';
yield 'c';
yield 'd';
}
var _fn3 = fn3();
for (var i of _fn3) {
console.log(i) // a b c d
}