JavaScript 范围问题,嵌套函数中的 var 访问未定义

标签 javascript node.js variables scope

下面是我正在开发的一个使用 Node.js 和 Request 的项目中的一个简单的 JavaScript block (已精简) .

在我写入控制台的第三个实例中,我无法理解为什么变量 xxxundefined 。我知道这是一个作用域问题,但我认为像这样的嵌套函数可以访问其父作用域中的变量。

我确信我误解了与此场景相关的范围。有人可以向我解释一下是什么阻止了对该变量的访问,也许还可以建议我如何将该变量传递到该函数中使用?

更新 - 下面的逐字代码:

在下面的例子中,groups定义在顶部,是根级变量。

(function getListings() {
  for (var i = 0; i < groups.length; i++) {
    console.log("1: " + JSON.stringify(groups[i]));
    var listingReqOptions = { url: format(listingsEndpoint, { "groupID": groups[i][1], "listingID": groups[i][0] }) };
    console.log("2: " + JSON.stringify(groups[i]));
    request(listingReqOptions, function (error, response, body) {
      console.log("3: " + JSON.stringify(groups[i]));
      if (!error && response.statusCode == 200) {
        var channel = format(listingsChannelTemplate, { "groupID": groups[i][1], "listingID": groups[i][0] });
        console.log("adding channel: " + channel);
        listingChannels[channel] = JSON.parse(body);
      }
      else {
        console.log("An error occurred while retrieving listing data: " + JSON.stringify(response));
      }
    });
  }
  // Loop
  setTimeout(getListings, 3000);
})();

最佳答案

试试这个,在上下文切换的情况下这更安全:

var xxx = "HEY LOOK AT ME";
console.log(xxx); // <-- "HEY LOOK AT ME"
var opts = { url: "http://example.com/foobaz" };
console.log(xxx); // <-- "HEY LOOK AT ME"

request(opts, function(e) { return function (error, response, body) {
  console.log(e);
  if (!error && response.statusCode == 200) {
    // stuff happens here
  }
}}(xxx));

关于JavaScript 范围问题,嵌套函数中的 var 访问未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26681933/

相关文章:

node.js - 无法从EC2访问具有IAM角色的S3文件

javascript - mongoose - 如何从 $pull 中删除元素

python - 如何预定义Python变量

javascript - Redux Forms 提交验证不设置错误信息

javascript - 如何在javascript中动态添加对象到对象中?

javascript - 锁定 Google Apps 脚本执行直到文本被替换

javascript - jquery嵌套函数中的全局变量?

templates - 给ejs添加插件?

variables - 带有变量的Grails FindAllWhere

r - 从数据集中删除重复项后无法保留所有变量