关于generator的介绍

generator

理解;generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次;

我们先了解什么是函数。一个函数是一段完整的代码,调用一个函数就是传入参数,然后返回结果:
例如:

function foo(x) {
    return a+ a;
}
var bb = foo(1); // 调用foo函数

函数在执行过程中,如果没有遇到return语句(函数末尾如果没有return,就是隐含的return undefined;),代码不会返回给函数;
generator和函数很像,定义如下:

function* foo(a) {
    yield a + 1;
    yield a + 2;
    return a+ 3;
}

generator和函数不同的是,generator由function定义(注意多出的号),并且,除了return语句,还可以用yield返回多次;

调用generator对象有两个方法
第一个方法是next():
next()方法会执行generator的代码,然后,每次遇到yield a;就返回一个对象{value: a, done: true/false},然后“暂停”。返回的value就是yield的返回值,done表示这个generator是否已经执行结束了。如果done为true,则value就是return的返回值。当执行到done为true时,这个generator对象就已经全部执行完毕,不要再继续调用next()了
例如:

var xxoo = fib(10)
xxoo.next() //获取一个对象 {value: a,done:false}
//当generator执行结束遇到 return的时候, {value:'return后面的值',done:true}

第二个方法是直接用for … of循环迭代generator对象,这种方式不需要我们自己判断done:
例如:

for (var x of fib(8)) {
            console.log(x); // 依次输出0, 1, 1, 2, 3, ...
            //不包含return的值
        }
上一篇:Web测试


下一篇:VSCode 报错