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(){}
,