• 原生js开发tab选项卡之闭包


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>原生JavaScript封装选项卡插件</title>
        <style>
            * {margin: 0; padding: 0; font-family: "5FAE8F6F96C59ED1",
            Helvetica, sans-serif; font-size: 14px;-webkit-user-select: none;}
            ul,li{list-style:none; }
            .box{
                width:500px;margin:20px auto;
            }
            .box ul{
                position:relative;
                top:1px;
            }
            .box ul:after{
                content:"";
                display:block;
                clear:both;
            }
            .box ul li{
                float:left;
                margin-right:15px;
                width:100px;
                height:30px;
                border:1px solid green;
                text-align:center;
                cursor:pointer;
            }
            .box ul li.selected{
                background:lightblue;
                border-bottom-color:lightblue
            }
            .box div{
                height:150px;
                line-height:150px;
                background:lightblue;
                border:1px solid green;
                text-align: center; display: none;
            }
            .box div.selected{display: block;}
        </style>
    </head>
    <body>
    <div class="box" id="tabFir">
        <ul>
            <li class="selected">页卡一</li>
            <li>页卡二</li>
            <li>页卡三</li>
        </ul>
        <div class="selected">内容一</div>
        <div>内容二</div>
        <div>内容三</div>
    </div>
    </body>
    <script>
        window.onload = function(){
            var tabFir = document.getElementById('tabFir'),
            oLis = tabFir.getElementsByTagName('li'),
            oDivs = tabFir.getElementsByTagName('div');
    
            debugger;
            for (var i = 0; i < oLis.length; i++) {
                (function (num){
                    oLis[i].onclick = function(){  //这个匿名函数在匿名函数自执行的内部,这两者
                        //形成了一个闭包
                        changeTab(num);            //最外层的每个匿名函数,就算执行环境被销毁了,
                                                   //但是由于changeTab(num),要引用其活动对象num
                                                   //所以活动对象仍然会留在内存中。
                                                    //由于在调用每个匿名函数时,我们传入了变量i.由于函数参数
                                                    /*是按值传递的,所以会将变量i的当前值,复制给参数num,而这个匿名函数
                                                    内部,又创建并返回num的闭包,这样一来,每个onclick回调函数都有自己
                                                    num变量的一个副本。因此可以返回各自不同的数值。
                                                    * */
                    }
                })(i);
            }
    
    //按值传递
            function changeTab(n) {
                for (var i = 0; i < oLis.length; i++) {
                    oLis[i].className = null;
                    oDivs[i].className = null;
                }
                oLis[n].className = 'selected';
                oDivs[n].className = 'selected';
            }
        }
    
    </script>
    </html>
  • 相关阅读:
    面向对象的三大特性(封装、继承、多态)-----继承
    前端---HTML
    几个排序算法的python实现
    构造方法关键字---this
    构造方法中关键字-- super
    多态(instanceof)
    接口
    抽象
    继承(重写与重载对比)
    数组的逆序
  • 原文地址:https://www.cnblogs.com/qianxunpu/p/8037438.html
Copyright © 2020-2023  润新知