Ссылка на внешнюю функцию var изнутри функции в узле
Мне интересно, как получить доступ к конкретной переменной в следующем коде:
Файл foo.js
function a(id, callback) {
//Do things
if (err) {
callback(err);
} else {
callback(null, result);
}
}
function b(x, callback) {
//Do things
if (err) {
callback(err);
} else {
callback(null, result);
}
}
Файл question.js
var id = 1;
var x = 2;
foo.a(id, function(err, result){
if (err) {
//Do stuff
} else {
foo.b(x, function(err, result){
if (err) {
//Do stuff
} else {
console.log("Function A: " + result); // I want to log result from foo.a
console.log("Function B: " + result);
}
});
}
});
Как я могу получить доступ к функции foo.b для изменения результата функции foo.a?
Вопрос в том, существует ли какой-либо способ ссылки на переменную без изменения имени. Что-то вроде this.result
или же super.result
,
1 ответ
Вопрос в том, существует ли какой-либо способ ссылки на переменную без изменения имени. Что-то вроде
this.result
или жеsuper.result
,
Нет, нет обозначения для доступа к идентификатору из внешней области видимости (в вашем случае result
параметр в a
обратный вызов), который вы скрыли, повторно используя имя идентификатора в области ошибок (в вашем случае result
параметр на b
обратный звонок).
Вместо этого просто дайте параметрам разные имена, так как ваш b
обратный вызов закрывается над result
ваш a
обратный вызов получает:
var id = 1;
var x = 2;
foo.a(id, function(err, aresult){ // <=== `aresult` instead of `result`
if (err) {
//Do stuff
} else {
foo.b(x, function(err, bresult){ // <=== `bresult` instead of `result`
if (err) {
//Do stuff
} else {
console.log("Function A: " + aresult); // <=== Use them
console.log("Function B: " + bresult); // <===
}
});
}
});