需要回调函数的原因是对 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
}
}