【问题标题】:JavaScript Access Local Variable with Same Name in Inner and Outer ScopeJavaScript 访问内部和外部范围内同名的局部变量
【发布时间】:2010-10-22 22:27:29
【问题描述】:

给定以下 JavaScript:

var someFunction = function(id) {
  //do some stuff
  var modifyId = function(id) {
     //do some stuff
     outer.id = id; //is there any way to modify the id variable in the outer scope from here?
  }
}

如何修改从内部函数作用域传入外部函数作用域的id?

【问题讨论】:

  • 所有回复合二为一:不行,必须重命名其中一个

标签: javascript scope


【解决方案1】:

很遗憾,你不能。通过将嵌套函数中的参数命名为id,您已经隐藏了外部函数中的参数。 Javascript 不包含访问影子名称的工具。唯一的选择是为其中一个变量选择不同的名称。

【讨论】:

    【解决方案2】:

    不,没有。在函数内部,没有办法(除了 Mozilla 的代码或 ES5 中的一些奇怪的东西)以任何明确的方式将范围称为上下文,也没有办法以任何直接的方式爬上词法范围链。

    好问题。

    【讨论】:

      【解决方案3】:
      var someFunction = function(id) {
        //do some stuff
        var oid = id;
        var modifyId = function(id) {
           //do some stuff
           // you can access the outer id via the oid variable
        }
      }
      

      但是,是的,您应该只重命名形式参数之一。

      【讨论】:

      • 一开始我以为这行得通,但如果 id 是一个原语,它就行不通了。从内部函数设置oid = "BLAH" 不会改变id 的值。如果是对象,id 和 oid 都会指向同一个对象,这几乎就是你想要的效果(你仍然无法通过调用oid = {a:1} 来改变对象 id 指向的对象
      • @Juan 是的。由于 id 是一个字符串(我假设),这意味着我的解决方法在这种情况下几乎没有用。因此,唯一的解决方案仍然是避免嵌套函数中具有相同名称的形参。
      【解决方案4】:

      为什么不能只重命名变量之一?

      【讨论】:

        猜你喜欢
        • 2011-06-01
        • 1970-01-01
        • 2016-06-23
        • 2013-12-25
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多