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;

ここのような別の関数で変数「dist」を使用したい

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

しかし問題は、dist変数の結果として0を取得し続けることです。

私はチェックしましたが、 de locDistance 関数内では dist 変数の値が異なるはずなので、ここでは関数は問題ではありません

私は何を間違っていますか?

前もって感謝します

4

1 に答える 1

3

上記のコードが機能しない理由は、var キーワードが locDistance メソッドで使用されているため、関数が呼び出されるたびに 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 に答える