如何从代码中获取变量a的值?

时间:2016-06-30 08:42:10

标签: javascript json node.js

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的输出。有什么指针吗?

3 个答案:

答案 0 :(得分:2)

您有两种替代方法可以为变量table2提供全局范围:

  1. 将其声明在a函数(*)之外,并将其分配到request周期(**),

    each
  2. 只需删除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'在那里,就像没有宣布'它包含varletconst。这样做会自动使它成为' 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来进行初始化。