生成器是一种特殊的函数,是ES6提供的一种异步编程解决方案
语法
function * gen(){
yield '小白兔'
yield '小刺猬'
}
function * gen(){
console.log('hello generator')
}
let iterator = gen();
iterator.next();
直接调用iterator是不能执行的,需要用迭代器的方法next()来执行。yield相当于函数代码的分隔符
function gen(){
//代码块1
yield 111;
//代码块2
yield 222;
//代码块3
yield 333;
//代码块4
}
也可以遍历 用 for of
带参数的生成器
生成器函数的声明:
function * gen(){
yield 111;
yield 222;
yield 333;
}
获取迭代器对象
let iterator = gen();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
next() 方法返回被选元素的后一个同级元素,返回结果为yield后面的自变量的值
在生成器函数中传入参数
function * gen(arg){
console.log(arg);
yield 111;
yield 222;
yield 333;
}
let iterator = gen('AAA);
console.log(iterator.next());
//console.log(iterator.next());
//console.log(iterator.next());
//console.log(iterator.next());
参数传递 arg指向AAA
next()方法调用时可以传入实参,实参就是yeild语句返回的结果。第二个next()方法传入的实参将作为第一个yeild的返回结果。
function * gen(arg){
console.log(arg); //aaa
let one = yield 111;
console.log(one); //BBB
let two = yield 222;
console.log(two); //CCC
let three = yield 333;
console.log(three); //DDD
}
let iterator = gen('aaa');
console.log(iterator.next('AAA'));
console.log(iterator.next('BBB'));
console.log(iterator.next('CCC'));
console.log(iterator.next('DDD'));
第一个next()里面的参数不被接收,但是没有第一个next()方法,那么接收第一个yeild后面自变量的参数就会后移一位,这样就不能输出所有的参数值。