2015-02-09 66 views
0

嘿,我准备了一个项目,其中会计算距离的html5地理位置。我有一个从Javascript中嵌套函数返回值的问题,任何人都可以帮助我吗?无法从Javascript中的嵌套函数返回值

这里是我的代码:

/* DISTANCE CALCULATOR FUNCTION */ 

function distanceCalc(latitudeB,longitudeB) { 
    var result; 

    if (navigator.geolocation) { 
    navigator.geolocation.watchPosition(showPosition); 
    } 

    function showPosition(position) { 
    calc(position.coords.latitude,position.coords.longitude); 
    } 

    function calc(latitudeA,longitudeA) { 
    var lat1 = latitudeA; 
    var lon1 = longitude; 
    var lat2 = latitudeB; 
    var lon2 = longitudeB; 
    var R = 6371; // km 
    var dLat = (lat2-lat1)*Math.PI/180; 
    var dLon = (lon2-lon1)*Math.PI/180; 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(lat1*Math.PI/180) * Math.cos(lat2*Math.PI/180) * 
    Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.asin(Math.sqrt(a)); 
    var d = R * c; 
    result = d.toFixed(1); 
    return result; 
    } 

    return result; 

} 

我想这样做

var test = distanceCalc(44.35678,33.78546); 

这个代码不工作,返回NaN值

+1

问题与返回值无关。 – Oriol 2015-02-09 16:16:19

+1

您是否试过通过调试器运行它并查看会发生什么? – 2015-02-09 16:16:29

+3

注意事项:应用正确的缩进可以让你的生活更轻松。 – melancia 2015-02-09 16:17:13

回答

0

有你的脚本这么多的错误,逻辑。另外,在获取地理位置坐标时,会进行assync调用。 试一试:

var DistanceCalc = function(latitudeB, longitudeB, onReadyCallback) { 
    this.latitudeB = latitudeB; 
    this.longitudeB = longitudeB; 
    this.callback = onReadyCallback; 

    //calling this.calc() here is ok... 
}; 

DistanceCalc.prototype.calc = function() 
{ 
    var __calc = function(position) {  
     var lat1 = position.coords.latitude; 
     var lon1 = position.coords.longitude; 
     var lat2 = this.latitudeB; 
     var lon2 = this.longitudeB; 

     var R = 6371; // km 
     var dLat = (lat2-lat1)*Math.PI/180; 
     var dLon = (lon2-lon1)*Math.PI/180; 
     var a = (
      Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(lat1*Math.PI/180) * 
      Math.cos(lat2*Math.PI/180) * 
      Math.sin(dLon/2) * Math.sin(dLon/2) 
     ); 
     var c = 2 * Math.asin(Math.sqrt(a)); 
     var d = R * c; 
     var result = d.toFixed(1); 

     this.callback(result); 
    }.bind(this); //bind to DistanceCalc object context 

    if (navigator.geolocation) { 
     navigator.geolocation.watchPosition(__calc); 
    } else { 
     console.log("geolocation is not available"); 
     this.callback(null); 
    }  
}; 

function doSomething(result) { 
    console.log(">>> ", result); 
} 

var calculator = new DistanceCalc(44.35678, 33.78546, doSomething); 
calculator.calc(); 
+0

谢谢你哥们 – billo 2015-02-11 00:01:36