foo = "foobar";
var bar = function(){
var foo = foo || "";
return foo;
}
bar();`
此代码为结果提供空字符串。为什么JS不能重新分配与全局变量同名的局部变量?在其他编程语言中,预期结果当然是“foobar”,为什么JS表现得那样?
答案 0 :(得分:25)
那是因为你声明了一个同名的局部变量 - 它掩盖了全局变量。所以当你写foo
时,你会引用局部变量。即使您在声明该局部变量之前编写它也是如此,JavaScript中的变量是函数范围的。但是,您可以使用全局变量是全局对象(window
)的属性:
var foo = window.foo || "";
window.foo
在这里指的是全局变量。
答案 1 :(得分:2)
一旦解释器看到var foo
,它就会认为foo
是一个局部变量。为什么?答案很简单:因为这就是这种语言的构建方式。 (不,它不是唯一以这种方式运作的语言)