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();

因此,在方法中,我们最好是将变量申明放在开头。

posted @ 2012-09-20 16:27  qzz  阅读(229)  评论(0编辑  收藏  举报