我使用casperjs来获取一些数据 我在函数内部使用变量,但我不能在该函数之外使用该变量
var website = 'test.com/index.php?id=';
casper.then(function () {
var var1 = this.getElementAttribute('input[type="text"][name="var1"]', 'value');
var var2 = this.getElementAttribute('input[type="text"][name="var2"]', 'value');
var var3 = this.getElementAttribute('textarea[name="var3"]', 'value');
var fullprint = (var1 + ', ' + var2 + ', ' + var3);
this.echo(fullprint);
});
var4 = (website + var2); // how to use var2 here in another then function
casper.thenOpen(function (var4) {
// some codes here
});
casper.run();
答案 0 :(得分:0)
但我无法在该功能之外使用该变量
你不能这样做,因为在JavaScript函数中定义了一个范围。内部作用域可以访问此作用域中定义的变量(例如,在函数内部定义了几个函数),但是从外部作用域中无法访问这些变量。
您可以创建一个单独的函数(实际上这不是您正在寻找的,但我认为这样的代码更具可读性)来获取您想要的值,如下所示:
function getInputValue(varName){
return document.getElementAttribute('input[type="text"][name="'+varName+'"]', 'value');
}
然后您可以更改以下代码:
// At this object you could define properties
// that you would like to use in many places in your code.
var values = {};
casper.then(function () {
var var1 = getInputValue("var1");
var var2 = getInputValue("var2");
values.var2 = var2;
var var3 = getInputValue("var3");
var fullprint = (var1 + ', ' + var2 + ', ' + var3);
this.echo(fullprint);
});
casper.thenOpen(function (var4) {
var website = 'test.com/index.php?id=';
var4 = website + values.var2;
// some codes here
});
casper.run();
答案 1 :(得分:0)
您需要在要从中访问它的每个内部函数可访问的作用域中声明var2
。