美文网首页
前端笔记(13)

前端笔记(13)

作者: rtrhhthth | 来源:发表于2018-07-22 11:29 被阅读0次

    代码:
    1.闭包

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>闭包</title>
        <script type="text/javascript">
            /*
            闭包的本质就是函数嵌套,就是在函数里面定义函数,
            内部函数可以引用外部函数的参数和变量
            参数和变量不会被垃圾回收机制给回收
            闭包的用途:可以存循环的索引值、做私有变量计数器
            */
            /*
            //闭包的一般写法
            function aa(b){
                var a = 12;
                function bb(){
                    alert(a);
                    alert(b);
                }
                return bb;
            }
            var cc = aa(24);*/
            
            //闭包的封闭函数写法
            var cc = (function(b){
                var a = 12;
                function bb(){
                    alert(a);
                    alert(b);
                }
                return bb;
            })(24);
            cc();
            
            /*
            //只能调用一次的闭包
            (function(b){
                var a = 12;
                function bb(){
                    alert(a);
                    alert(b);
                }
                return bb;
            })(24)();
            */
        </script>
    </head>
    <body>
        
    </body>
    </html>
    

    2.闭包循环的索引值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>闭包存循环的索引值</title>
        <style type="text/css">
            li{
                height: 30px;
                background-color: gold;
                margin-bottom: 10px;
            }
        </style>
        <script type="text/javascript">
            //闭包的用途:存循环的索引值
            window.onload = function(){
                var aLi = document.getElementsByTagName('li');
                // alert(aLi.length);//8
                for(var i=0; i<aLi.length; i++){
                    /*
                    aLi[i].onclick = function(){
                        alert(i);//每个li都弹出8,因为点击时循环已完毕,i最后为8
                    }
                    */
                    (function(k){//这里的k是形参
                        aLi[k].onclick = function(){
                            alert(k);//弹出每个li的索引值
                        }
                    })(i);//这里的i是实参
                }
            }
        </script>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
        </ul>
    </body>
    </html>
    

    3.闭包做选项卡

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>闭包做选项卡</title>
        <style type="text/css">
            .btns{
                width: 500px;
                height: 50px;
            }
            /*选项卡的样式*/
            .btns input{
                width: 100px;
                height: 50px;
                background-color: #ddd;/*默认灰色*/
                color: #666;
                border: 0px;
            }
            /*被选中的选项卡的样式*/
            .btns input.cur{
                background-color: gold;
            }
            /*内容区的样式*/
            .contents div{
                width: 500px;
                height: 300px;
                background-color: gold;
                display: none;/*默认隐藏*/
                line-height: 300px;
                text-align: center;
            }
            /*被选中的内容区的样式*/
            .contents div.active{
                display: block;
            }
        </style>
        <script type="text/javascript">
            //闭包做选项卡
            window.onload = function(){
                var aBtn = document.getElementById('btns').getElementsByTagName('input');
                var aCon = document.getElementById('contents').getElementsByTagName('div');
                // alert(aCon.length);
                //循环所有的选项卡按钮
                for(var i=0; i<aBtn.length; i++){
                    (function(i){
                        //给每个选项卡按钮添加点击事件
                        aBtn[i].onclick = function(){
                            //遍历所有选项卡按钮
                            for(var j=0; j<aBtn.length; j++){
                                //将每个选项卡按钮都设为灰色
                                aBtn[j].className = '';
                                //将每个内容区都隐藏
                                aCon[j].className = '';
                            }
                            //this代表当前点击的Button对象
                            this.className = 'cur';//当前点击的按钮为金色
                            // alert(i);//不加闭包时,不管点哪个按钮,i都等于3
                            //加闭包保存了索引值才有效
                            aCon[i].className = 'active';//当前点击的按钮对应的内容显示
                        }
                    })(i);
                }
            }
        </script>
    </head>
    <body>
        <div class="btns" id="btns">
            <input type="button" value="tab01" class="cur">
            <input type="button" value="tab02">
            <input type="button" value="tab03">
        </div>
        <div class="contents" id="contents">
            <div class="active">tab文字内容一</div>
            <div>tab文字内容二</div>
            <div>tab文字内容三</div>
        </div>
    </body>
    </html>
    

    4.获取地址栏参数

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>获取地址栏参数</title>
        <script type="text/javascript">
            window.onload = function(){
                //url?aa=tom#12
                var data = window.location.search;//?aa=tom
                var hash = window.location.hash;//#12
                alert(hash);//#12
                var oSpan = document.getElementById('span01');
                // alert(data);//?aa=tom
                var arr = data.split('=');
                // alert(arr);//?aa,tom
                var name = arr[1];
                oSpan.innerHTML = name;
            }
        </script>
    </head>
    <body>
        <div>欢迎<span id="span01"></span>访问我的主页</div>
    </body>
    </html>
    

    5.封闭函数

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>封闭函数</title>
        <script type="text/javascript">
            /*原来的写法
            function myAlert(){
                var str = '欢迎访问我的主页';
                alert(str);
            }
            myAlert();*/
            var str = function(){
                alert('test');
            }
            
            //封闭函数的一般写法
            //封闭函数定义:(function(){……})()
            /*
            ;;(function(){
                var str = '欢迎访问我的主页';
                alert(str);
            })();//最后的()表示马上执行
            */
            //封闭函数其他的写法:在匿名函数前加“!”或者“~”,之后加“()”
            ~function(){
                var str = '欢迎访问我的主页';
                alert(str);
            }();
        </script>
    </head>
    <body>
        
    </body>
    </html>
    

    6.变量的作用域

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>变量的作用域</title>
        <script type="text/javascript">
            /*
            全局变量:函数外部定义的变量,函数内部和外部都可以访问,它的值可以共享
            局部变量:函数内部定义的变量,函数内部可以访问,外部无法访问。函数内部访问变量时,先在内部查找是否有此变量,如果有,就使用内部变量,如果没有,就去外部查找
            函数内部如果不用'var'关键字定义变量,变量可能会变成全局变量,如果用严格模式解析会报错
            */
            var a = 12;
            function aa(){
                // var a = 5;
                var b = 7;
                // alert(a);
            }
            // alert(a);
            // alert(b);//报错
            aa();
        </script>
    </head>
    <body>
        
    </body>
    </html>
    

    7.倒计时

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>倒计时</title>
        <style type="text/css">
            #div1{
                width: 300px;
                height: 300px;
                background-color: ;
                margin: 50px auto;
            }
        </style>
        <script type="text/javascript">
            window.onload = function(){
                //活动第二天要将页面下线,直接跳转到其它页面,不会走后面的代码了
                // window.location.href = "http://www.baidu.com";
                var oDiv = document.getElementById('div1');
                function timeLeft(){
                    //实际开发中此时间从服务器获取,避免客户端调整时间
                    var now = new Date();
                    var future = new Date(2018,10,12,0,0,0);
                    // alert(future - now);//弹出与当前时间相差的毫秒数:12469935436
                    var milli = parseInt((future - now)/1000);
                    //活动当天页面下线,避免倒计时到点后继续计负时
                    // if(milli <= 0){
                    //  //页面跳转,不执行下面的代码了
                    //  window.location.href = "http://www.baidu.com";
                    // }
                    var day = parseInt(milli / 86400);
                    var hour = parseInt(milli % 86400 / 3600);
                    var minute = parseInt(((milli % 86400) % 3600) / 60);
                    var second = milli % 60;
                    oDiv.innerHTML = '距离2018年11月12日00时00分00秒还有' + day + '天' + toDouble(hour) + '时' + toDouble(minute) + '分' + toDouble(second) + '秒';
                }
                
                timeLeft();
                setInterval(timeLeft, 1000);
            }
            function toDouble(num){
                if(num < 10){
                    return '0' + num;
                }else{
                    return num;
                }
            }
        </script>
    </head>
    <body>
        <div id="div1"></div>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:前端笔记(13)

          本文链接:https://www.haomeiwen.com/subject/zpslmftx.html