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

JavaScript scope issue, var access in nested function is undefined

本文关键字:var 访问 未定义 函数 范围 问题 嵌套 JavaScript      更新时间:2023-09-26

我下面有一个简单的JavaScript块(已剥离),来自我正在处理的一个使用Node.js和Request的项目。

在我向控制台写入的第三个实例中,我无法理解为什么变量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));