关于generator的介绍

Generator是ES6引入的一种新的数据类型,它类似函数但可以多次返回。Generator通过function*定义,使用yield表达式可以在执行过程中暂停并返回一个值。调用Generator对象的next()方法或者使用for...of循环可以逐次执行Generator的代码,yield返回的值会被保存在返回对象的value属性中,而done属性表示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的值
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值