全局变量的产生
来源:互联网 发布:国海证券交易软件 编辑:程序博客网 时间:2024/05/14 20:05
由于JavaScript的两个特征,不自觉地创建出全局变量是出乎意料的容易。首先,你可以甚至不需要声明就可以使用变量;第二,JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。参考下面的代码:
function sum(x, y) { // 不推荐写法: 隐式全局变量 result = x + y; return result;}
此段代码中的result没有声明。代码照样运作正常,但在调用函数后你最后的结果就多一个全局命名空间,这可以是一个问题的根源。
经验法则是始终使用var声明变量,正如改进版的sum()函数所演示的:
function sum(x, y) { var result = x + y; return result;}
另一个创建隐式全局变量的反例就是使用任务链进行部分var声明。下面的片段中,a是本地变量但是b确实全局变量,这可能不是你希望发生的:
// 反例,勿使用function foo() { var a = b = 0; // ...}foo();console.log(a);console.log(b);
**结果是:
a is not define;
0;
b变成了全局变量。**
原因为:这个从右到左的赋值,首先,是赋值表达式b = 0,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。
换句话说,就好比你输入了:
var a = (b = 0);
如果你已经准备好声明变量,使用链分配是比较好的做法,不会产生任何意料之外的全局变量,如:
function foo() { var a, b; // ... a = b = 0; // 两个均局部变量}
然而,另外一个避免全局变量的原因是可移植性。如果你想你的代码在不同的环境下(主机下)运行,使用全局变量如履薄冰,因为你会无意中覆盖你最初环境下不存在的主机对象(所以你原以为名称可以放心大胆地使用,实际上对于有些情况并不适用)。
参考:http://www.nowamagic.net/librarys/veda/detail/1622
0 0
- 全局变量的产生
- 如何让js不产生冲突,避免全局变量的泛滥,合理运用命名空间
- 如何让js不产生冲突,避免全局变量的泛滥,合理运用命名空间
- C++的全局变量,静态全局变量,常全局变量定义与声明
- static全局变量与普通的全局变量区别
- 全局变量和静态全局变量的区别
- 静态全局变量和全局变量的区别
- static全局变量与普通全局变量的区别
- 全局变量和静态全局变量的区别
- c++ 静态全局变量 和 全局变量的区别
- 全局变量和静态全局变量的区别
- static全局变量与普通的全局变量
- C++全局变量和静态全局变量的区别
- C++静态全局变量和全局变量的区别
- 什么是全局变量?JavaScript的全局变量怎么定义?
- 全局变量的使用注意
- 全局变量的定义
- 全局变量的定义
- ActionBar 带返回箭头
- 为excel自动增加目录
- hdu5738 Eureka(数学)
- hdu 1258 Sum it up dfs+剪枝
- 韩信点兵
- 全局变量的产生
- example OpenCV Hello World
- LightOJ 1237 Cyber Cafe 费用流
- BOOTStrap
- lua os.date()
- android项目报错 org.JSONException:Value<html><head><title>Apache of type java.lang.String.
- Android进阶UI之BadgeView(数字提醒)
- 读《Android开发艺术探索》后的面试题整理
- 浏览器对js中nextSibling与previousSibling属性的支持