【问题标题】:Passing local variable with name of a global variable isn't possible in JS?在 JS 中无法使用全局变量的名称传递局部变量?
【发布时间】:2011-11-03 09:51:20
【问题描述】:
foo = "foobar";
var bar = function(){
    var foo = foo || "";
    return foo;
}
bar();`

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

【问题讨论】:

    标签: javascript global-variables scope local-variables


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      var foo = window.foo || "";
      

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

      【讨论】:

      • 谢谢!虽然 eval 语句中的全局变量不会直接显示在 window 对象下,但使用 eval 语句的并不多。
      • @user3015682:好吧,正如我所说的a while ago - 使用 eval 的正当理由很少。
      • 关于 eval 的一个很酷的事情是,它们是一种非常快速轻松地测试孤立代码 sn-ps 的好方法,但那是为了开发。
      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多