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

Gir*_*oft 4 javascript scope global-variables local-variables

foo = "foobar";
var bar = function(){
    var foo = foo || "";
    return foo;
}
bar();`
Run Code Online (Sandbox Code Playgroud)

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

Wla*_*ant 25

那是因为你声明了一个具有相同名称的局部变量 - 它掩盖了全局变量.所以当你写作时foo,请参考局部变量.即使您在声明该局部变量之前编写它也是如此,JavaScript中的变量是函数范围的.但是,您可以使用全局变量是全局对象(window)的属性这一事实:

var foo = window.foo || "";
Run Code Online (Sandbox Code Playgroud)

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