避免使用全局变量

全局变量可能导致命名冲突、代码脆弱性、测试困难等问题。JavaScript中未声明的变量会自动成为全局变量,容易引发错误。建议始终使用`var`声明变量,采用命名空间或模块化方法来组织代码,以减少全局变量的使用。命名空间可以通过关联数组模拟实现,而模块化可以参考特定的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、命名冲突



2、代码的脆弱性

如果全局变量不存在,那么使用全局变量的部分就失效甚至是报错。同样,任何函数如果不经意间修改了全局变量,导致全局变量值的依赖变得不稳定。


3、难以测试


4、当你给一个未被var语句声明过的变量赋值时,javascript会自动创建一个全局变量。比如:

 function doSomething(){

  var count = 10; // 局部变量

  title = 'Martain Luderking'; // 创建了全局变量

 }


如果上面的例子中count和全局变量同名,那么函数内使用的count是局部变量的count,如果要是用全局变量中的count,要显式地使用window.count来访问全局变量count。

如果全局变量中已经存在了title,那么上述例子中,则修改了全局变量title的值。


5、最好的规则就是总是使用var来定义变量,这样能降低某些场景省略了var所导致错误的可能性。


6、使用命名空间

    团队内部进行协同开发的时候,如果涉及到Javascript代码,可能会遇到函数名和类名冲突的情况。这时团队可以进行一些命名约定,比如在函数名前加相应的前缀区别,类似google igapi中使用的_IG_FetchXmlContent(),_IG_RegisterOnloadHandler()等。另外也可以引入命名空间的概念,但是Javascript原生并不支持命名空间,需要变通来实现。

在Javascript中,所有的对象(或者称类型,例如Boolean,Array,Function)都可以认为是一个关联数组。关联数组中的 对象可以使用点(.)进行引用,这样我们可以利用关联数组变相地实现命名空间。首先声明一个关联数组作为根,因为页面声明的对象都是window这个变量 的成员,所以一般命名空间的实现都以window为根。当向window申请a.b.c的命名空间时,首先在window中查看是否存在a这个成员,如果 没有则在window下新建一个名为a的空关联数组,如果已经存在a,则继续在window.a中查看b是否存在,以此类推。

(以上内容来源:http://panweizeng.com/javascript-namespace.html)


具体可以参考的方法和解释:http://www.cnblogs.com/dolphinX/p/3269145.html

基本的用法为:

(function(){                var _NS=function(){
                
                }
                _NS.prototype.alert=function(){
                    console.log('test');
                }
                window.NS=new _NS();
            })();



7、使用模块


8、零全局变量


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值