Доступ к локальной переменной JavaScript с одинаковыми именами во внутренней и внешней областях - PullRequest
12 голосов
/ 23 октября 2010

С учетом следующего 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?
  }
}

Как изменить идентификатор, переданный во внешнюю область функции изнутри внутренней области функции?

Ответы [ 4 ]

12 голосов
/ 23 октября 2010

К сожалению, вы не можете. Называя параметр во вложенной функции id, вы скрываете параметр во внешней функции. Javascript не содержит средств для доступа к теневому имени. Единственный вариант - выбрать другое имя для одной из переменных.

2 голосов
/ 23 октября 2010

Нет, нет.Внутри функции нет способа (что-то странное в коде Mozilla или ES5 в стороне) каким-либо явным образом ссылаться на контекст как на контекст, и нет никакого способа подняться по цепочке лексических областей каким-либо прямым способом.

Хороший вопрос, хотя.

1 голос
/ 23 октября 2010
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
  }
}

Но, да, вам следует просто переименовать один из формальных параметров.

1 голос
/ 23 октября 2010

Почему вы не можете просто переименовать одну из переменных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...