Javascript 从其他函数访问变量,而不创建全局变量
我最近开始使用CasperJS实现web自动化,有些事情让我有点困惑 如何将局部变量从一个函数访问到另一个函数?例如: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不在第二个函数
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)
})();代码>并将所有代码放在匿名函数中,以创建一个局部范围,这样变量就不会在全局范围内。啊,这是一个很好的例子。非常感谢。