js学习之ES6入门基础篇_补充 生成器函数

生成器函数 格式

function* 函数名(){

}

代码:

运行结果:

 

 console.log(show().next());

才是真正运行show函数的方式。

 

 

 生成器函数的使用,可以配合yield和next的配合,达到可以让函数无限次return的效果。

整体代码如下,具体讲解请参考下相关代码附近的注释。

另:附上之前的自动选择卡的讲解版的代码实现。

以上。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style type="text/css">
        *{
            margin: 0px;
            padding: 0px;
            list-style: none;
        }

        #clickGroup,#autoGroup{
            margin: 10px;
            padding: 10px;
        }

        h1{
            color:tomato;
        }

        #clickGroup>div,#autoGroup>div{
            width: 200px;
            height: 200px;
            background-color: pink;   
            border: 1px salmon solid; 
            /* div都不显示 */
            display: none;
        }

        /* 初始时候,只显示第一个div */
        #clickGroup>div:first-of-type,#autoGroup>div:first-of-type{
            display: block;
        }

        /* button:first-of-type{
            background-color: pink;   
        } */
    </style>
</head>
<body>
    <h1>点击事件组</h1>
    <div id="clickGroup">
        
        <button id="btn1">选项1</button>
        <button id="btn2">选项2</button>
        <button id="btn3">选项3</button>
        <div id="div1">DIV1</div>
        <div id="div2">DIV22</div>
        <div id="div3">DIV333</div>
    </div>
    
    <h1>自动播放组</h1>
    <div id="autoGroup">

        <button id="btn1">选项1</button>
        <button id="btn2">选项2</button>
        <button id="btn3">选项3</button>
        <div id="div1">DIV1</div>
        <div id="div2">DIV22</div>
        <div id="div3">DIV333</div>
    </div>


    <script type="text/javascript">
        // 函数生成器
        // function* show(){
        //     alert(1);
        // };

        // console.log(show);
        // console.log("=======1111111==========");
        // console.log(show());
        // console.log("=======2222222==========");
        // console.log(show().next());
        // console.log("=======3333333==========");

        function* show1(){
            yield function(){
                console.log("点击1");
            }
            yield ()=>{
                console.log("点击2");
            }
            yield function(){
                // console.log("点击1");
                document.body.style.backgroundColor='pink';
            }

            // next()只看yield,此时的return相当于无效。
            // yield类似于return
            // 不过他可以实现无限次return的效果
            // 通过对next的调用
            // return 10;
        };

        // 就当前这个注释掉的状态下,运行结果为:
        // 第一次点击 =》 点击1
        // 第二次点击 =》 点击2
        // 第三次点击 =》 背景色变粉色
        var k = show1();
        // k.next().value();
        // k.next().value();

        // document.body['onclick']=()=>show1().next().value();
        document.body['onclick']=()=>{
            // 第一次点击
            k.next().value();
        }

        // 那个自动选项卡的讲解版的实现
        [...document.querySelectorAll('#clickGroup>button')].find(
            // find 是循环,x 是 循环的元素, y 是下标
            (x,y)=> {
                // 这里的x 是每一个 button 元素
                // 为每一个 x button元素 绑定onclick 事件
                x['onclick'] = () => {
                    // 所有div 隐藏
                    [...document.querySelectorAll('#clickGroup>div')].find(
                        d=>{
                            d.style.display='none';
                        }
                    );
                    // 点到的div显示
                    [...document.querySelectorAll('#clickGroup>div')][y].style.display='block';
                }

            }
        )



    </script>
</body>
</html>
发布了64 篇原创文章 · 获赞 7 · 访问量 6690

猜你喜欢

转载自blog.csdn.net/MENGCHIXIANZI/article/details/105350053