zoukankan      html  css  js  c++  java
  • 课程笔记:——一个投票功能的实现方式比较

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
    body, div, span, h2 {
    margin: 0;
    padding: 0;
    font-family: "5FAE8F6F96C59ED1", Helvetica, sans-serif;
    font-size: 16px;
    font-weight: normal;
    -webkit-user-select: none;
    }

    h2 {
    margin: 20px auto;
    50%;
    height: 50px;
    line-height: 50px;
    border-bottom: 1px dashed #11c900;
    text-indent: 1em;
    }

    #div1 {
    margin: 20px auto;
    40%;
    height: 50px;
    line-height: 50px;
    text-align: center;
    background: #E0F2BE;
    border-radius: 10px;
    cursor: pointer;
    }

    /* #div1:active {
    background: #11c900;
    }*/

    #span1 {
    margin-left: 15px;
    letter-spacing: 5px;
    font-size: 20px;
    color: #ff3643;
    }
    </style>
    </head>
    <body>
    <h2>问题:认为信永亮很丑的请投票~~</h2>

    <div id="div1">我要投票<span id="span1">0</span></div>

    <script type="text/javascript">
    var oDiv = document.getElementById("div1");
    var oSpan = document.getElementById("span1");
    //1、利用全局作用域不销毁的原理,我们把需要保存的值放在全局变量中存储,每一次点击都让全局作用域下的num进行累加
    //弊端:在真实的项目中,我们为了避免全局变量之间的相互冲突,尽量减少使用全局变量(很多大公司都是禁止使用全局变量的)
    // var num = 0;
    // oDiv.onclick = function () {
    // num++;
    // oSpan.innerHTML = num;
    // };

    //2、我们自己创建一个不销毁的私有作用域,把需要累加的num变量做成私有变量
    //把自执行函数的返回值xxxfff222赋值给oDiv.onclick,当我们点击oDiv的时候,执行xxxfff222;
    // oDiv.onclick = (function () {
    // var num = 0;
    // return function () {
    // num++;
    // oSpan.innerHTML = num;
    // }
    // })();

    //3、和第二种方式的原理一样:形成一个不销毁的私有的作用域
    // ~function () {
    // var num = 0;
    // oDiv.onclick = function () {
    // num++;
    // oSpan.innerHTML = num;
    // };
    // }();

    //4、每一次点击的时候,我们都到页面中从新的获取数字,并且加1,把最新的结果在从新的放到页面中
    // oDiv.onclick = function () {
    //// var num = Number(oSpan.innerHTML);
    //// oSpan.innerHTML = ++num;
    // oSpan.innerHTML = Number(oSpan.innerHTML) + 1;
    // //-->Number(oSpan.innerHTML++);
    // };

    //5、自定义属性存储我们需要的值(性能相对最好的一种)
    oDiv.num = 0;
    oDiv.onclick = function () {
    // this.num++;
    // oSpan.innerHTML = this.num;
    oSpan.innerHTML = ++this.num;
    };

    //这种写法不行:每一次点击的时候都执行对应的方法,形成一个新的私有作用域,从新的进行预解释,从零开始赋值,这样每一次赋值给oSpan的都是1,执行完成后当前作用域销毁,我们的num的值没有实现累积
    // oDiv.onclick = function () {
    // var num = 0;
    // num++;
    // oSpan.innerHTML = num;
    // }

    //思考题:参考上面的方式和实现的原理,修改我们的选项卡,实现多种方式解决循环绑定事件的问题
    </script>
    </body>
    </html>

  • 相关阅读:
    Django——不同版本
    04爬取拉勾网Python岗位分析报告
    24 两两交换链表中的节点
    UniGUI学习之UniImage(39)
    Delphi7开发简单文件传输
    Javaday03(补充day02运算符,流程控制)
    java中代码块,构造方法和普通方法的代码执行顺序
    +=隐式类型转换
    关于switch中的default
    Java操作JSON数据(5)--jettison操作JSON数据
  • 原文地址:https://www.cnblogs.com/bareFootSummer/p/4922251.html
Copyright © 2011-2022 走看看