定义全局变量有3种方法:
1、在任何函数外面直接执行var语句
var f='value';
2、直接添加一个属性到全局对象上。全局对象是所有全局变量的容器,在Web浏览器中,全局对象名为window。
window.f='value';
3、直接使用未声明的变量,以这种方式定义的全局变量被称为隐式的全局变量
f='value'
JavaScript的策略是让那些被忘记预先声明的变量称为全局变量,这导致在程序中查找Bug变得非常困难。因为一个全局变量可以被程序的任何部分在任意时间改变,使得程序的行为被极大的复杂化。在程序中使用全局变量降低了程序的可靠性。
这些全局变量削弱了程序的灵活性,应该避免使用全局变量。努力减少使用全局变量的方法:在应用程序中创建唯一一个全局变量,并定义该变量为当前应用的容器。
如:
var My={};
My.name={
"first-name":"first";
"last-name:last";
};
My.work={
number:123;
};
除此之外,还可以使用闭包将信息隐藏,也是一种有效减少“全局污染”的方法。
JavaScript支持函数作用域,定义在函数中的参数和变量在函数外部是不可见的,并且在一个函数中的任何位置定义的变量在该函数中的任何地方都可见。但JavaSript不支持块级作用域(JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。 块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域),最好的做法是在函数体的顶部声明函数中可能用到所有变量。