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,就会立即报错,因为这是个对象,不是字符串。


    合乎自然而生生不息。。。
  • 相关阅读:
    (算法)堆与堆排序
    (笔试题)N!的三进制数尾部0的个数
    (笔试题)N!尾部连续0的个数
    程序员与编程一些鲜为人知的事实 软件遵循熵的定律
    关注职业发展,也要关注健康 别让老板杀了你
    其实,最好的年龄才刚刚开始
    你为什么就做不到呢? 正确的选择改变命运
    睡觉前为啥总是忍不住刷网页刷手机?
    中年程序员职业生涯另一选择:创业追寻自己的热情所在
    都很好的两人为何却没有好的婚姻 清楚对方的需要
  • 原文地址:https://www.cnblogs.com/samwu/p/2543616.html
Copyright © 2011-2022 走看看