如何编写高质量的Javascript代码(2)
来源:rockux 发布时间:2011-03-07 16:04:00
全局变量的问题
全局变量的问题在于,他在你的所有代码或者一个页面中都共享。他们在同一个命名空间下面,这通常会造成变量名冲突–两个同名的变量,但是确实不同的用处。
通常在一些页面中需要引入一些其他人的代码,比如:
第三方的JS库
广告伙伴的脚本
第三方的用户行为分析或者统计脚本
不同的组件、按钮等等
加入其中一个第三方组件定义了一个全局变量:result。然后在你的程序中,也定义了一个全局变量result。最后的这个result会覆盖点之前的result,这样第三方的脚本就会停止工作。
所以,为了对其他的脚本友好,在一个页面中使用越少的全局变量越好。在后面会有一些方法来告诉你如何减少全局变量,比如使用命名空间,或者自执行的匿名函数,但是最好的避免全局变量的方法就是使用var关键字来声明变量。
因为javascript的两个特性,创建一个全局变量非常的简单。第一,你可以使用一个甚至没有声明的变量,第二,在javascript中,所有未声明的变量都会成为全局对象的一个属性(就像一个声明了的全局变量一样)。看看这个例子:
function sum(x,y){
result = x + y;
return result;
}
在这个代码中,result在没有被声明的情况下就被使用了,这个代码也能很好的工作,但是在调用了这个函数之后,就会多一个名为result的全局变量,这是所有问题的根源了。
解决这个问题的办法就是使用var:
function sum(x,y){
var result = x + y;
return result;
}
两外一个不好的习惯就是在声明变量的时候使用链式的方法来赋值,这时候,a是局部变量,但是b就成为了全局变量。
function foo(){
var a=b=0;
....
}
这是因为,b = 0这个表达式先执行,执行的时候b并没有被声明,所以b就成为了全局变量,然后返回这个表达式的值0,给声明了的变量a,换句话说,就好像你输入的是:
var a = (b=0);
如果你已经声明变量,那么这种链式的赋值没有问题:
function foo(){
var a,b;
...
}
另外一个避免使用全局变量的原因是考虑到程序的可移植性。如果你想让你的代码在不同的环境中都可以工作,那么使用全局变量就很可能会与新的系统中的全局变量冲突(或许在之前的系统中没有问题)。
猜你喜欢
- 一直以来,我们大多使用js来实现弹出菜单,可是根据 w3c 的css标准,根本就没有这个必要。只需要简单得使用css+html就可以做出一个
- 在工作实践和学习中,如何开启 MySQL 数据库的远程登陆帐号算是一个难点的问题,以下内容便是在工作和实践中总结出来的两大步骤,能帮助DBA
- 先 Create table 吧create table emp(id int not null primary key,name varc
- 我们在前面的几节中分别讲了提高网站性能中内容、服务器、JavaScript和CSS等方面的内容。除此之外,图片和Coockie也是我们网站中
- 当你要使用data URI scheme的时候,你会发现,虽然他可以使用在绝大多数浏览器上,但无法再IE6和IE7上工作。不过值得庆幸的这一
- 就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型
- flash_url : "../swfupload/swfupload_f8.swf" upload_url: &quo
- 目的:JS+ASP打造无刷新新闻列表,下图所示的新闻列表相信大家并不少见,包括新闻的分页功能,本文要介绍的就是各分页间的切换方式。传统的方法
- GetRows 方法 将 Recordset 对象的多个记录复制到数组中。 语法 代码如下: array = recordset.GetR
- 为什么页面出现乱码?为什么数据库里出现乱码?为什么这些乱码的出现几率飘忽不定了?诸如此类的乱码问题困扰了很多WEB开发人员。假如不将这背后的
- 1.INPUT和图片按钮对齐:<form method="post" action="
- 代码如下:<% '/* 函数名称:Zxj_ReplaceHtmlClearHtml '/
- 最近在学习正则,一些比较有用的东西怕忘记,记下来,比较乱,想一条记录一条:正则表达式在线测试//匹配文本,这个偶尔比较好用,但是要小心字符中
- 网站域名一般都会选简短易记的,因为这对于网站宣传来说也可以省不少力。而被很多网站忽视的站内Url结构则在一定程度上反映出网站的整体架构。当设
- 在网页设计发展到一定阶段的时候就必然会和其他学科或领域只是产生交汇和共鸣,在阅读《超越CSS:web设计艺术精髓》这本书的时候,发现原来we
- HTML5本地存储初探(二)完成了数据的本地存储,就要将文件存储也搞定。为了实现文件的本地存储,html5搞了一个叫 manifest 的文
- 需要准备的工具:SQL Query Analyzer和SqlExec Sunx Version第一部分:去掉xp_cmdshell保护系统的
- 在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯
- 题目:一个六位数,分别用2,3,4,5,6乘它,得到的五个新数仍是由原数中的六个数字组成,只是位置不同,则此六位数是多少?function
- 密码已经是我们生活工作中必不可少的工具,但一个不安全的密码有又有可能会给我们造成不必要的损失。作为网站设计者,如果我们在网页中能对用户输入的