Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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_Variables_Return_Parameter Passing_Declare - Fatal编程技术网

Javascript 在函数外使用变量

Javascript 在函数外使用变量,javascript,variables,return,parameter-passing,declare,Javascript,Variables,Return,Parameter Passing,Declare,你好,我有这个功能 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.75

你好,我有这个功能

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变量的值不同,因此函数不是问题所在

我做错了什么


提前感谢

上面的代码不起作用的原因是,在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;
}

如果您至少使用相关的编程语言进行标记,这会有所帮助。如果可以避免,请尽量避免使用全局变量。在这种情况下,为什么不让
locaDistance
将距离作为返回值返回呢?@Barmar说了什么<代码>返回距离应该可以很好地工作…哈,我只是修改了它来这么说,但是谢谢你的否决票。否决票的全部目的是阻止糟糕的代码。。。当您删除有问题的代码时,我将很乐意删除它。:)我没有写令人不快的代码-原始海报写了-我只是回答了他的问题,为什么他总是看到0值。:)