下面是我正在开发的一个使用 Node.js 和 Request 的项目中的一个简单的 JavaScript block (已精简) .
在我写入控制台的第三个实例中,我无法理解为什么变量 xxx
是 undefined
。我知道这是一个作用域问题,但我认为像这样的嵌套函数可以访问其父作用域中的变量。
我确信我误解了与此场景相关的范围。有人可以向我解释一下是什么阻止了对该变量的访问,也许还可以建议我如何将该变量传递到该函数中使用?
更新 - 下面的逐字代码:
在下面的例子中,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/