Javascript 从其他函数访问变量,而不创建全局变量

Javascript 从其他函数访问变量,而不创建全局变量,javascript,scope,global-variables,phantomjs,casperjs,Javascript,Scope,Global Variables,Phantomjs,Casperjs,我最近开始使用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不在第二个函数

我最近开始使用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局部变量,并提供供他人使用的
getter
setter
函数

var SharedSpace=(函数(){
var shared=20;//初始化
返回{
getShared:function(){
收益共享;
},
设置共享:函数(val){
共享=val;
}
}
})();
(功能(){
警报(SharedSpace.getShared());
SharedSpace.setShared(500)
})();
(功能(){
警报(SharedSpace.getShared());
SharedSpace.setShared(400)
})();
(功能(){
警报(SharedSpace.getShared());
SharedSpace.setShared(10)

})();并将所有代码放在匿名函数中,以创建一个局部范围,这样变量就不会在全局范围内。啊,这是一个很好的例子。非常感谢。