内部和外部范围内具有相同名称的JavaScript访问本地变量

时间:2010-10-22 22:27:30

标签: 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?

4 个答案:

答案 0 :(得分:11)

不幸的是你做不到。通过在嵌套函数id中命名参数,您已在外部函数中隐藏了参数。 Javascript不包含用于访问阴影名称的工具。唯一的选择是为其中一个变量选择不同的名称。

答案 1 :(得分:2)

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

好问题。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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
  }
}

但是,是的,你应该重命名一个正式的参数。