1.注意隐式全局变量
function sum(a,b)
{
result=a+b;
return result;
}
上面虽然返回结果但是多了一个全局变量命名空间。
最好使用var 来声明变量
function sum(a,b)
{
var result=a+b;
return result;
}
2.注意创建隐式全部变量的反例
function foo(){
var a=b=0;
}
a是局部变量但是b 是全局变量,造成这现象的原因是因为从右到左的服务,首先b=0;b情况不明,所以声明为全局变量,然后var a=b,b返回值为0 赋给了a;
就好比:a=(b=0);
所以避免b为全局变量
function foo(){
var a,b;
a=b=0;
}
3.注意隐式全局变量和明确定义的全局变量有些小差异,就是通过的delete操作符让变量未定义的能力
a.通过var创建的全局变量(任何函数之外的程序创建)是不能删除。
b.无var创建的隐式全局变量(无视是否在函数中创建)是能被删除。
例如:
var global_var=1;
global_novar=2;
(function(){
global_funcation=3;
});
delete global_var; //false
delete global_novar;//true
delete global_funcation;//true
alert(typeof global_var); //number
alert(typeof global_novar);//undefined
alert(typeof global_funcation); //undefined;
4.单var形式
在函数顶部使用单var语句是比较有的一种形式,其好处在于:
a.提供了一个单一的地方去寻找功能所需要的所有局部变量。
b.防止变量在定义之前使用的逻辑错误
c.帮助你记住声明的全局变量,因此较少了全局变量
d.少代码
例如 :
fucntion fun(){
var a=1,
b=2,
sum=a+b;
myobject={},
i,
j,
global=window;
}
你可以使用一个var语句声明多个变量,并以逗号分隔。像这种初始化变量同时初始化的做法是很好的。则样可以防止逻辑错误(所有未初始化但声明的变量的初始值是undefined)和增加代码的可读性。
5. var预解析
javasript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这中行为称为:hoisting(预解析)。当你使用一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误。对于javasript,只要你的变量是在同一个作用域中(同一个函数),它都被当做是声明的,即使是它在var声明前使用的时候。
例如:
var myname="global";
function fun(){
alert(myname);
var myname="text";
alert(myname);
}
结果为: undefiend, text;
出现这样结果是因为myname被当做函数的局部变量(尽管是之后声明的),所有的变量声明当被悬置到函数的顶部了,因此,为了避免这中混乱,最好是预先声明你想使用的全部变量。
上面代码相同于
var myname="global";
function fun(){
var myname;
alert(myname);
myname="text";
alert(myname);
}
}