我在我正在使用的项目中使用了一个简单的JavaScript块(剥离),它使用了Node.js和Request。
在我写入控制台的第三个例子中,我无法理解为什么变量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);
})();
答案 0 :(得分:1)
试试这个,在上下文切换的情况下,这更安全:
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));