【ES6】Generator函数

Generator函数是ES6的重要特性,它使用function*声明,内部包含yield关键字。调用Generator函数返回一个迭代器,通过next()方法逐次执行函数体内的代码并获取yield后的值。next()方法可接收参数传递给上一个yield表达式。yield*用于组合多个Generator函数。return和yield的区别在于,return会结束函数执行,而yield则允许后续的next()继续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、声明Generator函数

Generator函数,又称生成器函数,是ES6的一个重要的新特性。
普通函数用function来声明,Generator函数用function*声明。
Generator函数函数内部有新的关键字:yield( 产出),普通函数没有。

    // 1.generator函数声明
    function* fn() {
        console.log('案例测试1');
        yield '1'
        console.log('案例测试2');
        yield '2'
        console.log('案例测试3');
    }

二、调用

返回一个iterator对象,对象里面有个next()方法,返回一个对象,里面有value ,done, value代表yield后面的值。

    // 2.调用
    var gen = fn()
    console.log(gen.next());  // 案例测试1  {value: '1', done: false}
    console.log(gen.next());  // 案例测试2 {value: '2', done: false}
    console.log(gen.next());  // 案例测试3  {value: undefined, done: true}
    console.log(gen.next());  // {value: undefined, done: true}

三、next()

next()方法可以接受一个参数,它的参数作为上一个yeild的返回值。

    // 3.next()方法可以接受一个参数,它的参数作为上一个yeild的返回值
    function* fn_1() {
        console.log('1');
        let res = yield 'a'
        // console.log(res);
        let res_1 = yield res
        yield res_1
    }
    let gen_1 = fn_1()
    console.log(gen_1.next());  // 1 {value: 'a', done: false}
    console.log(gen_1.next('b'));  // {value: 'b', done: false}
    console.log(gen_1.next('c'));  // {value: 'c', done: false}

四、yield*

从其他函数调用另一个函数,用yield*

    // 4.从其他函数调用另一个函数,用yield* 
    function* fn_2() {
        console.log('a');
    }
    function* fn_3() {
        console.log('b');
    }
    function* fn_4() {
        yield* fn_2()
        yield* fn_3()
        console.log('c');
    }
    var newGen = fn_4()
    newGen.next()   // a  b  c

五、return与yield区别

return:后面的语句不执行
yield:后面的语句执行,通过调用next()继续执行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值