我一直在使用Stoyan Stefanov 的面向对象的 JavaScript学习 Javascript
他提供了一个比较全局和本地范围的示例:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
看这个例子,我预计第一个警报是“123”,第二个警报是“1”。瞧,斯托扬说:
您可能期望第一个 alert() 将显示 123(全局变量 a 的值),第二个将显示 1(本地 a)。不是这种情况。第一个警报将显示“未定义”。这是因为在函数内部,局部作用域比全局作用域更重要。因此,局部变量会覆盖任何具有相同名称的全局变量。在第一次 alert() 时,a 尚未定义(因此值为 undefined),但它仍然存在于本地空间中。
我的解释不清楚,局部变量如何覆盖第一个警报中的全局变量?任何其他/不同的解释将不胜感激。