Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从Javascript中的嵌套函数返回值_Javascript_Function_Return Value_Nested Loops - Fatal编程技术网

无法从Javascript中的嵌套函数返回值

无法从Javascript中的嵌套函数返回值,javascript,function,return-value,nested-loops,Javascript,Function,Return Value,Nested Loops,嘿,伙计们,我准备了一个html5地理定位的项目来计算距离。我在Javascript中从嵌套函数返回值时遇到问题,有人能帮我吗 这是我的密码: /* DISTANCE CALCULATOR FUNCTION */ function distanceCalc(latitudeB,longitudeB) { var result; if (navigator.geolocation) { navigator.geolocation.watchPosition(showPositi

嘿,伙计们,我准备了一个html5地理定位的项目来计算距离。我在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值

脚本和逻辑上有太多错误。此外,当获取地理位置坐标时,会发出一个同步呼叫。 试一试:

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();

问题与返回值无关。您是否尝试过通过调试器运行它,看看会发生什么?旁注:应用正确的缩进可以让您的生活更轻松。我真的不确定您所说的是哪一段代码,但您有一些函数没有返回值,函数是异步的,和函数,这些函数期望在不调用任何参数的情况下调用参数。@billo您调用return showPosition;没有立场论证。