对于JS而言,我几乎是一个完整的菜鸟,而我正在度过最艰难的时光。
我正在使用Titanium Appcelerator,我需要使用下面函数之外的lon / lat变量,但是,当我调用它们时 - 它们显示为未定义。如何在函数外检索这些变量?任何帮助都是值得赞赏的!
function getLocation() {
current.text = "Finding you...";
actInd.show();
currentWindow.setLeftNavButton(actInd);
Titanium.Geolocation.getCurrentPosition(function(e)
{
if (e.error)
{
alert('Can not get your current location');
return;
}
Ti.API.info("Got Location");
var lon = e.coords.longitude;
lat = e.coords.latitude;
altitude = e.coords.altitude;
current.text = lat+" / "+lon;
});
};
答案 0 :(得分:2)
你必须改变你对此的看法。 JavaScript有一点functional programming的感觉,你需要对它进行处理。特别是在处理异步操作时,例如地理定位。简而言之,不只是一个范围问题,但也是一个执行顺序问题。
这里的基本方法是为getLocation()
提供一个函数,它将依次在正确的步骤中执行。
function getLocation( onSuccessCallback ) {
current.text = "Finding you...";
actInd.show();
currentWindow.setLeftNavButton(actInd);
Titanium.Geolocation.getCurrentPosition(function(e)
{
if (e.error)
{
alert('Can not get your current location');
return;
}
Ti.API.info("Got Location");
var lon = e.coords.longitude;
lat = e.coords.latitude;
altitude = e.coords.altitude;
current.text = lat+" / "+lon;
if ( 'function' == typeof onSuccessCallback )
{
onSuccessCallback( lat, lon );
}
});
};
然后,您拨打getLocation()
getLocation( function( lat, lon )
{
Ti.API.info( 'Lat: ' + lat );
Ti.API.info( 'Lon: ' + lon );
});
所以回顾一下:开始考虑代码如何以正确的操作顺序执行。考虑回调(或 lambdas )而不返回值。
答案 1 :(得分:0)
var lat;
var lon;
function getLocation(){
...same
}
除!在函数中lat
和lon
的变量赋值之前不要使用“var”;这意味着它们来自全球范围,并且只要您需要它们就可以访问它们。
你需要做的就是摆脱函数中lon
之前的“var”,并在全局范围内首先声明它们。