Доступ к внутренним переменным из внешних функций в JavaScript - PullRequest
4 голосов
/ 22 ноября 2010

Возможно ли получить доступ к внутренней переменной из внешней функции, как в этом примере?

function a(f) {
  var c = 'test';
  f();
}

a(function() {
  alert(c);  //at this point, c should = "test"
});

Ответы [ 4 ]

4 голосов
/ 22 ноября 2010

Нет, это не сработает.Важно то, где (лексически) функция определена , а не там, где она вызвана.

Когда выясняется, что (если вообще что-то) означает "c",язык выглядит в локальной области видимости, а затем в следующей области видимости на основе определения функции .Таким образом, если бы этот вызов «a» происходил в другой функции, которая имела , имеет свой собственный локальный «c», то это значение было бы тем, что показало предупреждение.

function b() {
  var c = 'banana';
  a(function() {
    alert(c);  
  });
}

b(); // alert will show "banana"
2 голосов
/ 22 ноября 2010

Нет, это не будет работать, потому что переменная c определена внутри функции и недоступна вне функции.Один из вариантов - передать переменную c в функцию, предоставленную a

function a(f) { 
  var c = 'test'; 
  f(c); 
} 

a(function(c) { 
  alert(c);  //at this point, c should = "test" 
}); 
2 голосов
/ 22 ноября 2010

Нет, это невозможно.Область, в которой вы объявляете анонимную функцию, не имеет доступа к этой переменной c - фактически, ничего кроме a никогда не будет иметь доступа к c.

0 голосов
/ 22 ноября 2010

Как уже говорили другие, это невозможно.Вы можете

1. Объявить переменную c вне области действия функции

2. Передать аргумент f:

function a(f) { var c = { name: 'test' }; f(c)  };
a(function(o) { alert(o.name) })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...