1

你好我有这个功能

locDistance(alat[i-1], alon[i-1], alat[i], alon[i]);

function locDistance(lat1, lon1, lat2, lon2) {
    //Radius of the earth in:  1.609344 miles,  6371 km  | var R = (6371 / 1.609344);
    //var R = 3958.7558657440545;
    var R = 3958.7558657440545; 
    var dLat = toRad(lat2-lat1);
    var dLon = toRad(lon2-lon1); 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * 
            Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c;
    var dist = d;
};

function toRad(Value) {
    /** Converts numeric degrees to radians */
    return Value * Math.PI / 180;
}

我知道我必须在函数外部声明变量才能在另一个地方使用它,所以我在页面顶部定义了

var dist = 0;

我想在这里的另一个函数中使用 de 变量“dist”

$('.content').append(dist);

但问题是由于 dist 变量,我一直得到 0。

我已经检查过,但在 de locDistance 函数内部, dist 变量具有不同的值,因为它应该是,所以函数不是这里的问题

我究竟做错了什么?

先感谢您

4

1 回答 1

3

上面的代码不起作用的原因是在 locDistance 方法中使用了 var 关键字,因此每次调用函数时都将 dist 设置为局部变量,而将全局 dist 设置为 0。

话虽如此...

也许您宁愿让 locDistance 返回值,然后在需要时调用该函数,例如:

$('.content').append(locDistance(alat[i-1], alon[i-1], alat[i], alon[i]));

function locDistance(lat1, lon1, lat2, lon2) {
    //Radius of the earth in:  1.609344 miles,  6371 km  | var R = (6371 / 1.609344);
    //var R = 3958.7558657440545;
    var R = 3958.7558657440545; 
    var dLat = toRad(lat2-lat1);
    var dLon = toRad(lon2-lon1); 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * 
            Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c;
    return d;
}

function toRad(Value) {
    /** Converts numeric degrees to radians */
    return Value * Math.PI / 180;
}
于 2012-11-16T17:14:47.147 回答