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

此代码给出一个结果空字符串。为什么 JS 不能重新分配与全局变量同名的局部变量?在其他编程语言中,预期的结果当然是“foobar”,为什么 JS 会这样呢?

4

2 回答 2

27

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

var foo = window.foo || "";

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

于 2011-08-25T06:55:21.683 回答
2

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

于 2011-08-25T06:55:56.183 回答