这是一个简单的问题,但我无法解决.
具体细节并不重要,但这里是要点.我有一些像这样的代码:
var lat = 0;
var lon = 0;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
lat = position.coords.latitude;
lon = position.coords.longitude;
});
}
Run Code Online (Sandbox Code Playgroud)
我认为它正在做的是:
然而,在那个块的末尾,lat和lon仍然是0.我尝试添加vars,将lat和lon传递给函数等但没有成功...
我该如何工作?
这是一个异步回调.基本上,您将函数传递给导航器API.然后,您的代码继续(并做任何事情).稍后,导航器API会使用答案(位置)调用您的回调.因此,任何使用position的东西都必须在回调内部(包括被调用).
另请参见前面的答案,其中显示了如何创建和使用包装函数.
编辑:您可以简单地编写一个调用回调的函数.如果需要,getLocation可以将另一个标志传递给其参数(例如,失败/成功代码).
function getLocation(callback)
{
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(callback);
}
else {
callback(null);
}
}
Run Code Online (Sandbox Code Playgroud)
然后呢:
getLocation(function(pos)
{
//do stuff
if(pos != null)
{
// loc stuff
}
// more stuff
});
Run Code Online (Sandbox Code Playgroud)
您不必使用匿名函数.