【问题标题】:Reference outside function var from inside function in Node从 Node 中的内部函数引用外部函数 var
【发布时间】:2017-12-12 10:04:00
【问题描述】:

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

文件 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 内部的 var 结果从函数 foo.a?

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

【问题讨论】:

    标签: javascript node.js variables scope


    【解决方案1】:

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

    不,没有用于从外部范围(在您的情况下,a 的回调中的 result 参数)访问标识符的符号,您通过在错误范围(在您的情况,b 回调上的 result 参数)。

    相反,只需为参数指定不同的名称,因为您的 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); // <===
          }
        });
      }
    });
    

    【讨论】:

    • 嘿,谢谢。这就是我“修复”它的方式。但是,如果有某种方法可以做参考,问题就更多了。
    • @alopez:我不知道你所说的“做参考”是什么意思。如果你的意思是当你通过在b 的回调中声明result 来隐藏它时,你是否可以访问a 的回调的result 参数:不,你不能。您已经通过在内部范围上使用相同的名称来隐藏它。没有特定于范围的符号来访问它。
    • 完美!这就是我想知道的,如果有一些符号可以从 a 而不是 b 访问结果。如果不可能,我会保留它并更改名称。谢谢!
    • @alopez:不用担心,很高兴有帮助!附注:您不是从ab 访问它们,而是从传递给ab 的匿名回调访问它们。 :-)(您根本无法从 ab 访问它们;它们不在范围内。)
    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多