在JS中无法传递具有全局变量名称的局部变量?

时间:2011-08-25 06:50:59

标签: javascript global-variables scope local-variables

foo = "foobar";
var bar = function(){
    var foo = foo || "";
    return foo;
}
bar();`

此代码为结果提供空字符串。为什么JS不能重新分配与全局变量同名的局部变量?在其他编程语言中,预期结果当然是“foobar”,为什么JS表现得那样?

2 个答案:

答案 0 :(得分:25)

那是因为你声明了一个同名的局部变量 - 它掩盖了全局变量。所以当你写foo时,你会引用局部变量。即使您在声明该局部变量之前编写它也是如此,JavaScript中的变量是函数范围的。但是,您可以使用全局变量是全局对象(window)的属性:

的事实
var foo = window.foo || "";

window.foo在这里指的是全局变量。

答案 1 :(得分:2)

一旦解释器看到var foo,它就会认为foo是一个局部变量。为什么?答案很简单:因为这就是这种语言的构建方式。 (不,它不是唯一以这种方式运作的语言)