一、全局变量是java最糟糕的特征之一:
1、在浏览器打开的一个网页里面,全局变量主要导致下面的问题:
|
1) 变量名冲突- 如果你工作在一个团队里面,你和同事使用全局作用域下的同一个变量名字,最后修改的变量的值,将被保存,这明显导致有一个人将得不到自己定义的值,程序也就出错了。
2) 安全性-每一个用户都可以使用全局对象 Window (or global). 并增加一个变量到全局对象里面,所有的用户有权改我刚增加的变量,本来私人的东西,别人怎么能看呢!
3) 速度慢-对给定一个变量,首先在currnt context 里面找,没找到再去父context里找,最后才是全局里面找。如果有继承,哪么速度会更慢。
4)增加存贮容量: 想想一个浏览器页面没有关闭,哪么全局变量一直保存着,浪费空间,电脑
速度也会变慢。
5)使用也不灵活
|
所以能不用就不用
2、减少使用全局变量的两种方式:
第一:全局变量只有一个,
var myapp={};
该全局变量是你的应用容器,在下面建立所有对象,函数等等:
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"
}
};
|
你的所有资源在myapp名称空间之下,你的程序与其它应用程序,组件或类库之间的冲突减小。
第二:闭包
二、无块级作用域
最好在每个函数开头部分声明所有变量,既然放哪里一样,哪放在前面更好,有利于掌握一个函数用到的变量常量数。
三、{ 在return 下面 , undefined
1、
var TestBlock=function()
{
var test1=function(){
var i=0;
return
{
status:2
};
};
var re=test1();
alert(re.status);
};
TestBlock();
结果:re undefined
//{ 和 return 一行,返回对象
return{
status:2
};
结果:弹出框 2
|
四、typeof 判断数据类型
typeof null
返回 object,而不是null ,【检测空用:my==null;
一个更大的问题是检测是一个对象或空
if (my_value && typeof my_value === 'object') {
// my_value is an object or an array!
上面:返回包括status成员的对象。