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