0

私は JavaScript の地理位置情報機能を使用しようとしていますが、JavaScript の動作方法に問題があると思います。地理位置情報機能の使用方法に関する多くの例を見つけましたが、それらはすべて基本的に次のようになります。

navigator.geolocation.getCurrentPosition(function(position){alert("Your Coordinates:\nLatitude: " + position.coords.latitude + "\nLongitude: " + position.coords.longitude);});

上記のコードは機能しますが、私がやろうとしているのは次のようなものです:

function geoMe(){
    var position = navigator.geolocation.getCurrentPosition();
    var geoLocationDiv = document.getElementById('geoLocationDiv');
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;
    geoLocationDiv.innerHTML = latitude + "," + longitude;
}

ご想像のとおり、機能していません。私は例のようにすべてが「詰め込まれた」コードを解釈するのが得意ではなかったので、非常に混乱しています。

サンプルコードを見ると、「getCurrentPosition」という関数があるようです。さて、ここで迷ってしまいます。[パラメータとして]「位置」と呼ばれるパラメータを持つ getCurrentPosition にパラメータとして渡される関数があるようです。「位置」パラメーターはどこから来たのですか??? 関数(実際の関数名なし)がパラメーターとして使用されている場所を見てきましたが、本当に混乱しています。通常、私は次のようなことをします:

function functionName(parameter1, parameter2, parameterN){
    function body
}

このようなことを行うには高度な機能が必要であることはわかっていますが、私は単純な人間であり、単純なコードが好きで、関数に名前を付けるのが好きです。

では、この GeoLocation を希望どおりに動作させるのを手伝ってくれる人はいますか? そして、途中で、JavaScript 関数のこの奇妙な方法について説明していただけますか?

ありがとう、素晴らしい一日を。:-)

4

2 に答える 2

2

これ:

function geoMe () {
    navigator.geolocation.getCurrentPosition(function ( pos ) {
        document.getElementById('geoLocationDiv').innerHTML =
                pos.coords.latitude + "," + pos.coords.longitude;
    });
}

ライブデモ: http://jsfiddle.net/K6sKe/1/

関数オブジェクトをgetCurrentPositionメソッドに渡す必要があります。この関数はコールバック関数として機能し、ユーザーがその場所へのアクセス許可を与えると呼び出されます。この場合、コールバック関数は無名関数式です。このgetCurrentPositionメソッドは、Position オブジェクトを渡すコールバックを呼び出すように設計されています。したがって、関数式はpos、Position オブジェクトを表す 1 つの仮引数 ( ) を定義します。コールバック内で、その Position オブジェクトにアクセスできます。

于 2012-10-05T23:40:24.340 に答える
1

getCurrentPosition を 1 つのパラメーターを受け取る単なる別の関数と見なすだけであれば、それほど奇妙ではありません。ただし、そのパラメーターはたまたま無名関数です。コールバック関数の考え方を説明するための非常に簡単な例を次に示します。

function sayHi(myFunction) {
    alert(myFunction());
}

sayHi(function() {return 'Hello World'});

上記の sayHi は、myFunction というパラメーターを受け取る関数であり、myFunction は文字列 'Hello World' を返す単なる関数です。これは明らかに非常に単純化された例ですが、文字列を渡すことで簡単に実現できます。ただし、このアプローチを使用すると、関数がより複雑になったときに、より柔軟でクリーンなコードが得られます。

于 2012-10-06T00:43:12.247 に答える