如何使用casperjs将变量传递到函数外部

时间:2017-01-28 08:37:21

标签: javascript variables casperjs

我使用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();

2 个答案:

答案 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