Javascript 如何在GM_xmlhttpRequest中修复这个JS范围
当我运行此代码时,警报2显示6个不同的href链接。警报3显示最后6次href。如何使其使用与警报2相同的对象(linkdom又名链接) 注意:这是一个greasemonkey脚本Javascript 如何在GM_xmlhttpRequest中修复这个JS范围,javascript,greasemonkey,scope,Javascript,Greasemonkey,Scope,当我运行此代码时,警报2显示6个不同的href链接。警报3显示最后6次href。如何使其使用与警报2相同的对象(linkdom又名链接) 注意:这是一个greasemonkey脚本 { var linkdom = thelink; alert('2' + linkdom.getAttribute("href")); GM_xmlhttpRequest({ method: 'GET', url:
{
var linkdom = thelink;
alert('2' + linkdom.getAttribute("href"));
GM_xmlhttpRequest({
method: 'GET',
url: href,
onload: function(resp){
//...
alert('3' + linkdom.getAttribute("href"));
}
});
//...
}
如果这是您自己的函数,我会说将其作为参数传入。或者,如果JavaScript有默认参数,我会说将其作为默认参数传入。但现在的情况是。。。试试这个
{
var linkdom = thelink;
alert('2' + linkdom.getAttribute("href"));
GM_xmlhttpRequest({
method: 'GET',
url: href,
onload: (function() {
var localvar = linkdom;
return function(resp){
//...
alert('3' + localvar.getAttribute("href"));
}})()
});
//...
}
这将创建一个外部函数,并将局部变量设置为当前值
linkdom
。然后它创建并返回您的函数。然后,我立即应用外部函数来恢复函数。外部函数不会共享相同的局部变量,因此代码应该可以工作。如果这是您自己的函数,我建议将其作为参数传入。或者,如果JavaScript有默认参数,我会说将其作为默认参数传入。但现在的情况是。。。试试这个
{
var linkdom = thelink;
alert('2' + linkdom.getAttribute("href"));
GM_xmlhttpRequest({
method: 'GET',
url: href,
onload: (function() {
var localvar = linkdom;
return function(resp){
//...
alert('3' + localvar.getAttribute("href"));
}})()
});
//...
}
这将创建一个外部函数,并将局部变量设置为当前值
linkdom
。然后它创建并返回您的函数。然后,我立即应用外部函数来恢复函数。外部函数不会共享相同的局部变量,因此代码应该可以工作。我以前见过这种模式,除了linkdom
作为参数传递给内联函数,而不是让内联函数关闭它。这两者有什么区别吗?我不确定。我认为效果是一样的——创建一个局部变量,其中包含您想要的内容。这种方式对我来说更清楚一些,因为您可以更清楚地看到localvar
中的内容。我以前见过这种模式,除了linkdom
作为参数传递给内联函数,而不是让内联函数关闭它。这两者有什么区别吗?我不确定。我认为效果是一样的——创建一个局部变量,其中包含您想要的内容。这种方式对我来说更清晰,因为您可以更清楚地看到localvar
中的内容