zoukankan      html  css  js  c++  java
  • JavaScript全局变量的避免(《JavaScript语言精粹》相关笔记)

    全局变量是魔鬼。

    因为,你不小心,在代码的某一处修改了全局变量, 会导致依赖全局变量的其它模块出错。而且出错原因难调试,难找到。

    再者就是,网页运行肯定用到window对象,浏览器引擎又要遍历一次window的属性,性能下降。

    那么,如何避免

    方法一:只创建一个全局变量。

    MYAPP.stooge = {
        "first-name": "Joe",
        "last-name": "Howard"
    };

    MYAPP.flight = {
        airline: "Oceanic",
        number: 815,
        departure: {
            IATA: "SYD",
            time: "2004-09-22 14:55",
            city: "Sydney"
        },
        arrival: {
            IATA: "LAX",
            time: "2004-09-23 10:42",
            city: "Los Angeles"
        }
    };


    方法二:使用模块模式

    var serial_maker = function (  ) {

    // Produce an object that produces unique strings. A
    //
     unique string is made up of two parts: a prefix
    //
     and a sequence number. The object comes with
    //
     methods for setting the prefix and sequence
    //
     number, and a gensym method that produces unique
    //
     strings.

        var prefix = '';
        var seq = 0;
        return {
            set_prefix: function (p) {
                prefix = String(p);
            },
            set_seq: function (s) {
                seq = s;
            },
            gensym: function (  ) {
                var result = prefix + seq;
                seq += 1;
                return result;
            }
        };
    }(  );

    var seqer = serial_maker(  );
    seqer.set_prefix = 'Q';
    seqer.set_seq = 1000;
    var unique = seqer.gensym(  );    // unique is "Q1000"

     所谓模块模式,就是创建一个函数,该函数包括,私有变量和一个特权对象,特权对象的内容是,利用闭包能访问到私有变量的函数,最后返回特权对象。

    首先,方法二,不仅可以当作全局变量用,也可以用在局部声明全局变量。因为就算你在不知道某个地方修改了seqer,就会立即报错,因为这是个对象,不是字符串。


    合乎自然而生生不息。。。
  • 相关阅读:
    Linux下PHP升级的方法
    centos6 授权文件夹所有用户可用
    重置密码遇到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)问题
    MySQL Daemon failed to start. 正在启动 mysqld:[失败]
    MySql取消密码强度验证功能
    twbsPagination.js分页插件
    同一个Tomcat部署多个springboot项目问题
    同一个tomcat部署多个项目导致启动失败
    启动Spring boot项目报错:java.lang.IllegalArgumentException: LoggerFactory is not a Logback
    Vue中关于vue-awesome-swiper插件使用以及要注意的 “坑”
  • 原文地址:https://www.cnblogs.com/samwu/p/2543616.html
Copyright © 2011-2022 走看看