es6 之 generator(二)

之前说过generator 函数是将函数拆分,具体的请往下面看

yield 之传递参数

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script>
        // 
        function *sayName(){
            console.log(1);
            let name=yield;
            console.log(name);
            console.log(2);
        }
        let say=sayName();
        say.next('我是谁呀?')
        say.next('你是xqzi')
    </script>
</html>

上面的代码会输出什么呢? 答案就是 1、你是xqzi、2;看下面这张图,我们将函数一分为二 ,红色圆圈包围的就是 say.next('我是谁呀?'),这样的话是不是会清楚一点呢

那么上面输出的是不是稍微理解一点了呢?也就是说 第一个next()函数是无法传递参数的,那么假如我们需要默认值怎么办呢,我们可以这样写

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script>
        // 
        function* sayName(arg) {
            console.log(arg);
            let name = yield;
            console.log(name);
        }
        let say = sayName('我是默认值');
        say.next()
        say.next('我是传递的name值')
    </script>
</html>

yield之返回值,请看下面的例子的返回结果

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    </body>
    <script>
        function *show(){
            yield 5;
        }
        let gen=show();
        
        let genResult=gen.next();
        console.log(genResult);//{done: false,value: 5}
        
        let genResult2=gen.next();
        console.log(genResult2);//{done: true,value: undefined}
    </script>
</html>

yield 返回值更像是返回的中间值 ,generator在函数中对数据进行加工,并给数据一个是否处理完成的标识 done  完成时done为true 最后一步的返回值为underfined是为什么呢?因为最后并无返回值 我们可以再函数内部加上一个返回值,这样最后返回的值就是我们的return 值

 

 

posted @ 2019-03-05 14:48  善良的小邱子  阅读(126)  评论(0)    收藏  举报