在Node中从函数内部引用函数var

时间:2017-12-12 10:04:00

标签: javascript node.js variables scope

我想知道如何访问以下代码中的特定变量:

档案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);
  }
}

文件问题.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.a中访问函数foo.b中的var结果?

问题是,是否有某种方法可以在不查询名称的情况下引用变量。类似于this.resultsuper.result

1 个答案:

答案 0 :(得分:0)

  

问题是,是否有某种方法可以引用变量而不会追溯名称。类似于this.resultsuper.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); // <===
      }
    });
  }
});