Javascript:文件中函数的作用域
我有一个奇怪的问题,无法理解函数的作用域在文件中是如何工作的 例如。 编辑 实际代码Javascript:文件中函数的作用域,javascript,node.js,phantomjs,Javascript,Node.js,Phantomjs,我有一个奇怪的问题,无法理解函数的作用域在文件中是如何工作的 例如。 编辑 实际代码 var page = require('webpage').create(); function fPrintObj(obj) { // Object properties var output = ''; for (var property in obj) { output += property + ': ' + obj[property]+'; '; }
var page = require('webpage').create();
function fPrintObj(obj) {
// Object properties
var output = '';
for (var property in obj) {
output += property + ': ' + obj[property]+'; ';
}
console.log(output);
}
function fGetXpathAd() {
xPathAd = "//div[@class='col-xs-12 col-sm-12 col-md-12 col-lg-12 home-solutions-head']";
console.log(xPathAd);
var adcopy = document.evaluate( xPathAd, document, null, XPathResult.STRING_TYPE, null);
fPrintObj(adcopy); //DOES NOT WORK
return adcopy;
}
function main(status) {
console.log('Evaluating ad-copy.... ');
var a = page.evaluate(fGetXpathAd);
// fPrintObj(a); // WORKS
phantom.exit();
}
// fSetRandomUserAgent();
page.open('https://www.position2.com', main );
错误
在phantomjs中,page.evaluate是一个页面上下文,您不能调用在此上下文之外定义的函数。您应该将函数作为第二个参数传递给页面。请按如下方式计算:
function fGetXpathAd(fPrintObj) {
xPathAd = "//div[@class='col-xs-12 col-sm-12 col-md-12 col-lg-12 home-solutions-head']";
console.log(xPathAd);
var adcopy = document.evaluate( xPathAd, document, null, XPathResult.STRING_TYPE, null);
fPrintObj(adcopy); //WILL WORK
return adcopy;
}
function main(status) {
console.log('Evaluating ad-copy.... ');
var a = page.evaluate(fGetXpathAd, fPrintObj);
// fPrintObj(a); // WORKS
phantom.exit();
}
我希望这会有所帮助。我看不出您是如何得到您所说的“找不到变量:f3”错误的。我怀疑上面的代码不是导致上述错误的实际代码。您上面的代码在这里工作。。我想还有其他问题。如果您发布您的实际代码,则会更好。完全按照您所包含的代码,代码没有问题。因此,如果您遇到问题,那么您的实际代码并不像您在问题中描述的那么简单。您将不得不透露更多的真实问题,以便我们能够提供帮助。可能是f3在浏览器上下文中,f1、f2在phantomjs上下文中。只是猜测而已。请发布一些代码片段。我同意这听起来很奇怪。我正在PhantomJs上运行完整的代码。
ReferenceError: Can't find variable: fPrintObj
phantomjs://webpage.evaluate():6 in fGetXpathAd
phantomjs://webpage.evaluate():8
phantomjs://webpage.evaluate():8
function fGetXpathAd(fPrintObj) {
xPathAd = "//div[@class='col-xs-12 col-sm-12 col-md-12 col-lg-12 home-solutions-head']";
console.log(xPathAd);
var adcopy = document.evaluate( xPathAd, document, null, XPathResult.STRING_TYPE, null);
fPrintObj(adcopy); //WILL WORK
return adcopy;
}
function main(status) {
console.log('Evaluating ad-copy.... ');
var a = page.evaluate(fGetXpathAd, fPrintObj);
// fPrintObj(a); // WORKS
phantom.exit();
}