在Javascript中检索函数特定变量

时间:2011-04-04 04:58:07

标签: javascript variables appcelerator

对于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;

    });
};

2 个答案:

答案 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
}

除!在函数中latlon的变量赋值之前不要使用“var”;这意味着它们来自全球范围,并且只要您需要它们就可以访问它们。

你需要做的就是摆脱函数中lon之前的“var”,并在全局范围内首先声明它们。