コールバック関数が必要な理由は、getCurrentPosition の呼び出しが非同期であるためです。したがって、「親」のスコープ (getCurrentPosition が呼び出されるスコープ) 内の変数として位置を公開できますが、これは成功のスレッドとは異なるため、getCurrentPosition を呼び出す実行のスレッドでは役に立ちません。関数。たとえば、これは機能しません。
function parent(){
var position;
function success(p) {
position = p;
}
function error (msg) {
//log error codes etc here
}
navigator.geolocation.getCurrentPosition(success, error);
var longitude = position.coords.longitude; // position is undefined here
}
ただし、コードをより小さなチャンクに分割したい場合は、親のスコープ内の変数に位置を格納し (それを渡す必要がないようにする)、複数の関数を連鎖させることができます。
function parent(){
var position;
function success(p) {
position = p;
doSomethingWithPosition();
}
function error (msg) {
//log error codes etc here
}
navigator.geolocation.getCurrentPosition(success, error);
function doSomethingWithPosition(){
var longitude = position.coords.longitude; // position is defined here
doSomethingElseWithPosition();
}
function doSomethingElseWithPosition(){
var latitude = position.coords.latitude; // position is defined here
}
}