欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6 生成器函数

程序员文章站 2022-07-13 08:42:00
...

ES6生成器函数

  • 生成器函数

生成器函数与普通函数的区别

普通函数 生成器函数
普通函数一旦运行,不能中途暂停 生成器函数可以中途暂停
普通函数每次都从开始的时候开始执行 生成器函数是从上次暂停的位置继续执行
  • 生成器函数创建
  • 函数定义时,在function后加*的就是生成器函数
  • *的位置没有要求
 //生成器函数
    //在函数定义时,在function 后加*的就是生成器函数
    function* fun(){
        console.log('函数执行');
        yield '函数继续执行'
        console.log('函数执行')
        yield '函数继续执行'
        console.log('函数执行')
    }
    //生成器函数在调用时是不执行的,会返回一个对象,这个对象有个next方法
    let i=fun();
    console.log(i)

ES6 生成器函数

  • 生成器函数执行流程

ES6 生成器函数

<script>
        //生成器函数
        //在函数定义时,在function 后加*的就是生成器函数
        function* fun() {
            console.log('1');
            yield '2'
            console.log('3')
            yield '4'
            console.log('5')
            return
        }
        //生成器函数在调用时是不执行的,会返回一个对象,这个对象有个next方法
        let i = fun();
        console.log(i)
        let o = i.next();
        console.log(o.value, o.done, o.done ? '函数执行完毕' : '函数未执行完毕')
        //调用next方法后,函数执行到 第一个yield停止 会返回一个对象{value:'',done:''}
        //value的值为yield的值
        //done有两个值 true false
        //false 函数为执行完毕
        //true 函数执行完毕
        o = i.next()
        console.log(o.value, o.done, o.done ? '函数执行完毕' : '函数未执行完毕')
        //第二次调用,会从上次退出的位置,执行到下面的第一个yield停止 返回一个对象
        o = i.next()
        console.log(o.value, o.done, o.done ? '函数执行完毕' : '函数未执行完毕')
    //第三次调用时,会从上一次函数退出的位置,继续执行,到下一个yield停止
    //直到遇到return
    </script>

ES6 生成器函数