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

Access Variable from a different function without creating global variables

我最近开始使用 CasperJS 来做 Web 自动化,有些事情让我有点困惑。

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

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

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

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

使用对象获取某个变量怎么样属性:

var myObj = {};

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

casper.thenOpen('http://google.com/analytics', function(){
    console.log(myObj.someVar);
});

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

定义辅助函数时才这样做
casper.start('http://google.com', function(){
    this.someVar = 20;
});

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

不使用你说的 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)
})();