Вы на самом деле не дали нам достаточно, чтобы продолжить, но это утверждение:
Однако обратный вызов не распознает никаких функций / объектов / переменных за пределами своей области.
... неверно.Функция имеет доступ ко всему в области видимости, где она определена, например:
var a = 10;
function foo(b) {
bar(5);
function bar(c) {
alert(a + b + c);
}
}
foo(12); // alerts "27"
Обратите внимание, как bar
имел доступ не только к c
, но и к b
(от вызова кfoo
) и a
(из самой внешней области видимости).
Итак, в вашем примере анонимная функция, которую вы передаете в качестве обратного вызова, имеет доступ ко всему, что находится в области видимости, где она определена;doAwesomeStuff
будучи определенным в другом месте, предположительно имеет доступ к различной информации, поэтому вам потребуется обратный вызов для передачи ему любых необходимых ему данных.
Так что я предполагаю, что ваш код выглядит примерно так:
function doAwesomeStuff(data) {
// ...
}
function doSomethingNifty() {
var a = 10,
b = 20;
someObject.getSomeData({option1:'value1', option2:'value2'},
function(data) {
doAwesomeStuff(data);
}
);
}
... и вы хотите, чтобы doAwesomeStuff
имел доступ к a
и b
от звонка на doSomethingNifty
.Если это так, ваши единственные варианты - передать их в качестве аргументов (вероятно, лучше всего) или экспортировать их в переменные некоторой области видимости, которые разделяют doSomethingNifty
и doAwesomeStuff
(вероятно, не идеально, слишком похоже на глобальные переменные).