我想更新我的全局变量,这些变量旨在保存我的坐标值。它们的值仅在函数内部,而不在外部(全局)。说实话,这让我发疯了。如果我想使用它们的值,我必须在函数中调用函数...这对我来说没有意义(我更喜欢单独调用函数)。以下是我的代码:
var lat = '';
var lon = '';
navigator.geolocation.getCurrentPosition(succes, error);
function succes(position){
var crd = position.coords;
lat = crd.latitude;
console.log('inside: '+lat);
}
function error(err){
console.warn(err.code + ': ' + err.message);
}
console.log('outside: '+lat);
知道为什么会这样吗?
编辑:我现在意识到,执行的顺序并不像我想要的那样。为什么呢?
答案 0 :(得分:0)
问题是navigator.geolocation.getCurrentPosition(succes, error)
是异步的。它不会在最终console.log()
之前被调用,因为它出现在该语句之前的代码中。最终的console.log()
会在success
函数返回之前运行,此时lat
尚未分配其值。
你可以做你正在尝试的事情,你只需要等到success
完成:
var lat = '';
var lon = '';
navigator.geolocation.getCurrentPosition(succes, error);
function succes(position){
var crd = position.coords;
lat = crd.latitude;
lon = crd.longitude;
// At this point, we know that the global variables have been
// assigned their values, so it's safe to access them:
successIsDone();
}
function error(err){
console.warn(err.code + ': ' + err.message);
}
function successIsDone(){
console.log('latitude: '+ lat);
console.log('longitude: '+ lon);
}

答案 1 :(得分:0)
navigator.geolocation.getCurrentPosition
很可能是异步的,对吗?这意味着console.log('outside: '+lat);
在为lat
分配值之前执行。您必须在成功之后(或内部)使用您的变量:
var lat = '';
var lon = '';
navigator.geolocation.getCurrentPosition(succes, error);
function succes(position){
var crd = position.coords;
lat = crd.latitude;
console.log('inside: '+lat);
doSomethingWithMyVariables();
}
function error(err){
console.warn(err.code + ': ' + err.message);
}
function doSomethingWithMyVariables(){
console.log('outside: '+lat);
}