JavaScript访问内部和外部作用域中同名的局部变量

JavaScript访问内部和外部作用域中同名的局部变量,javascript,scope,Javascript,Scope,考虑到以下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:

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?

为什么不能重命名其中一个变量?

不幸的是,您不能。通过在嵌套函数
id
中命名参数,可以在外部函数中隐藏该参数。Javascript不包含用于访问隐藏名称的工具。唯一的选择是为其中一个变量选择不同的名称

没有。在一个函数中,没有办法(除了Mozilla的代码或ES5中的一些奇怪的东西)以任何显式的方式将作用域称为上下文,也没有办法以任何直接的方式提升词法作用域链

好问题

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}
@Juan Yes来更改对象id指向的对象。因为id是一个字符串(我假设),这意味着我的变通方法在这种情况下几乎毫无用处。因此,唯一的解决方案仍然是避免在嵌套函数中使用名称相同的形式参数。所有回复都是一个:你不能,你必须重命名其中一个