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


    合乎自然而生生不息。。。
  • 相关阅读:
    VS.NET2013发布网站的时候去掉.cs文件(预编译)(转)
    vs2013发布网站合并程序是出错(ILmerge.merge:error)
    转:c# Linq 的分页[转]
    AStar 路径规划之初级二
    ASttar 路径规划之初级
    AttributeError: module 'tensorflow' has no attribute 'set_random_seed'
    github提示Permission denied (publickey),如何才能解决?
    机器学习-模型评价指标
    pcl-qt使用QVTKWidget 与PCLVisualizer 显示雷达点云
    pcl-设置多线段宽度和颜色
  • 原文地址:https://www.cnblogs.com/samwu/p/2543616.html
Copyright © 2011-2022 走看看