根据作用域不同,将变量分为以下两类:
(1)全局变量
1.变量定义时未使用var关键字
2.在函数外部定义的变量
(2)局部变量
1.在函数内部定义的变量(包含参数位置)
普通的全局变量
var i=10;
function a() {
alert(i);
};
a(); //结果为10
普通的局部变量
var a=3;
function show(){
var a=4;//就近原则//局部变量
document.write(a);
}
show();
有迷惑性的
var i=8;
function a() {
alert(i);
var i = 2;
};
a();
上述代码输出undefined,也许很多人理解不了,但是根据作用域链很容易明白。在程序加载完成后,所有声明过的变量都已经加载完成,然后开始运行程序,当程序检测到有局部变量,局部变量就会有优先权,跳过了全局变量,程序又是依照着自上而下的原则,当输出i的时候,程序并没有运行到i=2;检测不到i的初始化,就会输出undefined。
某知名公司笔试题
var a,b;
(function(){
alert(a);
alert(b);
var a = b = 3;
alert(a);
alert(b);
})();
alert(a);
alert(b);
结果输出 undefined undefined 3 3 undefined 3
代码等价于
var a,b;
(function(){
alert(a);
alert(b);
var a = 3;
b = 3;
alert(a);
alert(b);
})();
alert(a);
alert(b);
这主要是Js中没有用var声明的变量都是全局变量,而且是顶层对象的属性。