02函数-05-generator(ES6)
generator(生成器)是ES6标准引入的新的数据类型。
generator看上去像一个函数,但可以返回多次,除了return语句,还可以用yield返回多次。定义方式如下:
function* foo(x) {
yield x + 1;
yield x + 2;
return x + 3;
}5
1
function* foo(x) { 2
yield x + 1;3
yield x + 2;4
return x + 3;5
}直接调用generator和调用函数不同,不会立刻执行,而是创建了generator对象。想要调用,有两种方法,接以上语法示例代码为例:
(1)不断使用generator对象的next()方法,会返回yield和return的值
var test = foo(3);
test.next(); // Object {value:4, done:false}
test.next(); // Object {value:5, done:false}
test.next(); // Object {value:6, done:true}
test.next(); // Object {value:undefined, done:true}5
1
var test = foo(3);2
test.next(); // Object {value:4, done:false}3
test.next(); // Object {value:5, done:false}4
test.next(); // Object {value:6, done:true}5
test.next(); // Object {value:undefined, done:true}next方法执行时每遇到yield会返回一个对象,包含返回的值,以及done属性,该属性表示generator是否执行结束。
(2)使用 for ... of 迭代generator对象,返回yield的值,不需要我们自己判断done
for(var x of foo(3)){
console.log(x);
}
//4, 51
for(var x of foo(3)){2
console.log(x);3
}4
//4, 5
浙公网安备 33010602011771号