JS中没有块级作用域
先看一段代码
var scope="global";
function f(){
alert(scope);
var scope="local";
alert(scope);
}
f();
刚开始,可能会认为第一个弹出“global”,第二个弹出“local”,其实不然,由于JS中没有块级作用域,在后面申明的var scope 在整个函数的作用域中都有效,也就是说
在整个函数的范围内,由于局部变量的优先级更高,因此隐藏了一个scope的全局变量,而且scope的值在var scope="local"语句执行过后才有效,因此,第一次弹出的是
"undefined";第二次弹出的是“local”;
此代码等价于
var scope="global";
function f(){
var scope;
alert(scope);
scope="local";
alert(scope);
}
f();
因此,在方法中,我们最好是将变量申明放在开头。