request(target, function (err, resp, body) {
$ = cheerio.load(body);
links = $('a');
$(links).each(function (i, link) {
if ($(link).text().match('worker')) {
var a = $(link).attr('href').toString();
}
});
});
我想在进一步的程序中使用变量a
的输出。有什么指针吗?
答案 0 :(得分:2)
您有两种替代方法可以为变量table2
提供全局范围:
将其声明在a
函数(*)之外,并将其分配到request
周期(**),即:
each
只需删除var a; // (*)
request(target, function (err, resp, body) {
$ = cheerio.load(body);
links = $('a');
$(links).each(function (i, link) {
if ($(link).text().match('worker')) {
a = $(link).attr('href').toString(); // (**)
}
});
});
周期内的变量声明(*),即:
each
(如果为尚未声明的变量赋值,它将自动成为全局变量。)
答案 1 :(得分:0)
var
声明为function
- 作用域。这意味着它只能在它声明的函数中使用。
说明:
// 'a' does not exist
$(links).each(function (i, link) {
if($(link).text().match('worker')){
var a=$(link).attr('href').toString();
// 'a' exists'
}
// 'a' exists'
});
// 'a' does not exist
某些' hacks'在那里,就像没有宣布'它包含var
,let
或const
。这样做会自动使它成为' global',但是这有关于内存使用和潜在内存泄漏的缺点(将var
置于其外部也是如此。函数)。
使用它的一个更好的方法可能是将功能分开一点,让一个函数调用另一个函数(或者使用回调,但我讨厌回调,而且它们并不是解决所有问题的方法)。
答案 2 :(得分:0)
如果你喜欢这样:
的JavaScript
var savedLinks;
request(target, function (err, resp, body) {
savedLinks = [];
$ = cheerio.load(body);
links = $('a');
$(links).each(function (i, link) {
if ($(link).text().match('worker')) {
var a = $(link).attr('href').toString();
savedLinks.push(a);
}
});
});
然后你可以遍历savedLinks
。
像这样:
for(var i = 0; i < savedLinks.length; i++) {
console.log(savedLinks[i]);
}
当然,你必须在某个时候调用函数request
来进行初始化。