第六章 避免使用全局变量

6.1 全局变量带来的问题

6.1.1 命名冲突

当脚本中的全局变量和全局函数越来越多时,发生命名冲突的概率也随之增高。
所有的变量都被定义为局部变量,这样的代码才是最容易维护的。

6.1.2 代码的脆弱性。

一个依赖于全局变量的函数即是深耦合于上下文环境中。如果环境发生改变,函数很可能就失效了。

当定义函数的时候,最好尽可能多地将数据置于局部作用域内。

任何来自函数外部的数据都应当以参数形式传进来。

这样做,可以将函数和其外部环境隔离开来,并且你的修改不会对程序其他部分造成影响。

6.1.3 难以测试

确保你的函数不会对全局变量有依赖,这将增强你的代码的可测试性。

6.2 意外的全局变量

JS中有不少陷阱,其中一个就是不小心创建全局变量。

请看以下代码:

function doSomething() {
    var count = 10;
        title = "javascript"    //不好的写法,创建了全局变量
}

不小心省略var 语句可能意味着你在不知情的情况下修改某个已存在的全局变量。

function doSomething() {
    var count = 10;
        name = "javascript"    //不好的写法,创建了全局变量
}

因为name实际上是window的一个默认属性,这个全局变量覆盖了全局变量中的name

避免意外的全局变量
1:全局变量和局部变量都用var声明
2:利用工具自动检测报警

6.3 单全局变量

过多的全局变量,长期看来可行性和可维护性都欠佳。
最佳方法是依赖尽可能少的全局变量,即只创建一个全局变量。

6.3.1 命名空间

将功能按照命名空间进行分组,可以让你的单全局对象变的井然有序,同时,也可以让团队成员知晓新功能应该属于哪个部分,
或者去哪里查找已有的功能。

var modular = {
    
    //绑定初始化值
    init: function(){
        this.time = 30;
    },
    //执行初始化方法
    bindEvents: function(){
        this.render();
    },
    render: function(){

    }
}

modular.init();

6.3.2 模块

使用AMD模块化 或 requireJS模块加载器

6.4 零全局变量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容