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

Javascript 如何从下面的代码中获取变量a的值?,javascript,json,node.js,Javascript,Json,Node.js,我想在进一步的程序中使用变量a的输出。有指针吗?您有两种方法可以为变量a指定全局范围: 在请求函数(*)之外声明它,并在每个循环(**)内分配它,即: 只需删除每个周期(*)内的变量声明,即: (如果为尚未声明的变量赋值,它将自动成为全局变量) 有两种方法可以为变量a指定全局范围: 在请求函数(*)之外声明它,并在每个循环(**)内分配它,即: 只需删除每个周期(*)内的变量声明,即: (如果为尚未声明的变量赋值,它将自动成为全局变量) var声明的作用域是函数。这意味着它只能在声明它的函数

我想在进一步的程序中使用变量
a
的输出。有指针吗?

您有两种方法可以为变量
a
指定全局范围:

  • 请求
    函数(*)之外声明它,并在
    每个
    循环(**)内分配它,即:

  • 只需删除
    每个周期(*)内的变量声明,即:

    (如果为尚未声明的变量赋值,它将自动成为全局变量)


  • 有两种方法可以为变量
    a
    指定全局范围:

  • 请求
    函数(*)之外声明它,并在
    每个
    循环(**)内分配它,即:

  • 只需删除
    每个周期(*)内的变量声明,即:

    (如果为尚未声明的变量赋值,它将自动成为全局变量)


  • var
    声明的作用域是
    函数。这意味着它只能在声明它的函数中使用

    说明:

    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(); // (*)
            }
        });
    });
    
    有一些“黑客”存在,比如不使用
    var
    let
    const
    来“声明”它。这样做会自动使它变为“”,但这在内存使用和潜在内存泄漏方面当然有缺点(将
    var
    放在函数之外也可以实现这一点)


    更好的使用方法可能是将功能进一步拆分,让一个函数调用另一个函数(或者使用回调,但我讨厌回调,而且它们不是所有问题的解决方案)。var
    声明的范围是
    function
    。这意味着它只能在声明它的函数中使用

    说明:

    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(); // (*)
            }
        });
    });
    
    有一些“黑客”存在,比如不使用
    var
    let
    const
    来“声明”它。这样做会自动使它变为“”,但这在内存使用和潜在内存泄漏方面当然有缺点(将
    var
    放在函数之外也可以实现这一点)

    更好的使用方法可能是将功能进一步拆分,让一个函数调用另一个函数(或使用回调,但我讨厌回调,它们不是解决所有问题的解决方案)。

    如果您喜欢这样做:

    JavaScript

    // '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
    
    然后您可以通过
    savedLinks
    进行迭代

    像这样:

    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);
            }
        });
    });
    
    for(变量i=0;i
    当然,您必须在某个时候调用函数
    request
    ,以便对其进行初始化。

    如果您这样做:

    JavaScript

    // '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
    
    然后您可以通过
    savedLinks
    进行迭代

    像这样:

    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);
            }
        });
    });
    
    for(变量i=0;i


    当然,您必须在某个时候调用函数
    request
    ,以便对其进行初始化。

    将a声明为全局变量,在顶部
    var a然后你可以在其他地方使用它,在顶部声明一个奇怪的结果“未定义”。还有什么吗?链接只匹配一次吗
    if($(link).text().match('worker'))
    现在就给我写一个答案:p通常的方法是添加一个回调,然后用
    a
    作为参数调用它然后你可以在其他地方使用它,在顶部声明一个奇怪的结果“未定义”。还有什么吗?链接只匹配一次吗
    if($(link).text().match('worker'))
    现在为您编写一个答案,请给我一点提示:p通常的方法是添加一个回调,然后用
    a
    作为参数调用它。现在,如果我打印一个I.e.console.log(a)输出udefined@user561810这是因为
    request
    是一个异步函数@user561810我们离题了;也许你应该研究异步函数是如何工作的,然后再问一个关于异步函数的新问题。我的问题是“我想在下一个程序中使用变量a的值”,这与你给出的解决方案不同。所以1.)当我不能进一步使用它时,使它成为全局变量有什么好处?@user561810您可以进一步使用全局变量。问题不在于“如何”,而在于“何时?”。现在,如果我打印一个I.e.控制台,日志(a)输出是udefined@user561810这是因为
    request
    是一个异步函数@user561810我们离题了;也许你应该研究异步函数是如何工作的,然后再问一个关于异步函数的新问题。我的问题是“我想在下一个程序中使用变量a的值”,这与你给出的解决方案不同。所以1.)当我不能进一步使用它时,使它成为全局变量有什么好处?@user561810您可以进一步使用全局变量。问题不在于“怎么做”,而在于“什么时候”。我们能不能-->?变量a=NOdeJS?中的函数()。就像在scalaofcourse中一样,您可以声明
    var a=function(){}
    ,但第二步是
    a=$(link.attr('href').toString()
    a
    不再是该功能。我想,在继续Node.jso之前,首先了解更多关于JavaScript的知识可能会很有用。换句话说,这在NodeJSWell中是不可能的,首先:它是JavaScript。Node.js只是一个运行JavaScript的服务器端框架。第二:当然有可能,但就像@Alessio Cantarella和我说的,在继续这个项目之前,你可能想开始学习更多关于JavaScript和关于JavaScript的异步部分。我们不能-->吗?变量a=NOdeJS?中的函数()。就像在scalaofcourse中一样,您可以声明
    var a=function(){}