javascript中的变量范围

Ric*_*haw 2 javascript

这是一个简单的问题,但我无法解决.

具体细节并不重要,但这里是要点.我有一些像这样的代码:

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)

我认为它正在做的是:

  1. 将lat和lon设置为0
  2. 如果浏览器具有地理位置,请使用实际值覆盖这些变量

然而,在那个块的末尾,lat和lon仍然是0.我尝试添加vars,将lat和lon传递给函数等但没有成功...

我该如何工作?

Mat*_*hen 6

这是一个异步回调.基本上,您将函数传递给导航器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)

您不必使用匿名函数.