从不同函数访问变量而不创建全局变量

时间:2015-07-11 09:52:31

标签: javascript scope global-variables phantomjs casperjs

我最近开始使用CasperJS进行网络自动化,但有些事让我感到困惑。

如何从一个函数访问局部变量到另一个函数?例如:

casper.start('http://google.com', function(){
    var someVar = 20;
});

casper.thenOpen('http://google.com/analytics', function(){
    // How can I access someVar?jav
});

我知道someVar不在第二个函数的范围内,但如何在不定义全局变量的情况下访问第二个函数中的someVar

3 个答案:

答案 0 :(得分:2)

如何使用对象将某个变量作为属性:

poly.setPath(path);

答案 1 :(得分:1)

不使用Globals,然后创建第三个函数(bean),该函数具有var someVar = 20;局部变量,并提供其他人使用的gettersetter函数。

var SharedSpace = (function(){
 var shared = 20; //initialization
 return {
   getShared: function(){
                      return shared;
                   },
   setShared: function(val){
                      shared = val;
                   }
   }
})();

(function(){
    alert(SharedSpace.getShared());
    SharedSpace.setShared(500)
})();

(function(){
    alert(SharedSpace.getShared());
    SharedSpace.setShared(400)
})();

(function(){
    alert(SharedSpace.getShared());
    SharedSpace.setShared(10)
})();

答案 2 :(得分:0)

你不能这样做,以使它干净,有意义。定义全局变量是唯一干净的方法。您当然可以将变量放在casper对象上,但这并不干净,因为如果您使用错误的变量名称,它可能会干扰CasperJS功能。我只在为casper定义辅助函数时才这样做。

casper.start('http://google.com', function(){
    this.someVar = 20;
});

casper.thenOpen('http://google.com/analytics', function(){
    this.echo(this.someVar);
});