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


    合乎自然而生生不息。。。
  • 相关阅读:
    MyBatis之启动分析(一)
    通俗算法教程03
    数学倒底有没有绝对的严格性和形式化?
    通俗算法教程02
    .NET Core 中正确使用 HttpClient 的姿势
    通俗算法教程01
    我要写一篇文章吗?
    [ASP.NET MVC 小牛之路]18
    [ASP.NET MVC 小牛之路]17
    [ASP.NET MVC 小牛之路]16
  • 原文地址:https://www.cnblogs.com/samwu/p/2543616.html
Copyright © 2020-2023  润新知