Javascript函数变量范围直通地理定位

时间:2013-01-07 16:16:18

标签: javascript variables geolocation scope

我只是想从HTML5中获取geolocation.getCurrentPosition函数中的变量。但是,我在将函数定义到函数之外时遇到了很多困难。

该功能使用以下代码:

<script>
var latitude;
var longitude;
var accuracy;
var altitude;
var altitudeAccuracy;
var heading;
var speed;

if (navigator.geolocation){
  navigator.geolocation.getCurrentPosition(  
    function (position) {
      latitude = position.coords.latitude;
      longitude = position.coords.longitude;
      alert(longitude)
      accuracy = position.coords.accuracy;
      altitudeAccuracy = position.coords.altitudeAccuracy;
      heading = position.coords.heading;
      speed = position.coords.speed;
    }
  );
}

// alert(latitude);

在这里,我看到alert(longitude)返回一个数值。但是当我评论该行时,并取消注释alert(latitude) - 我收到“未定义”警报。

任何帮助将不胜感激!感谢。

2 个答案:

答案 0 :(得分:4)

因为getCurrentPosition是异步调用。

您需要等待回调才能访问它所检索的值。

function nextStep(){
    alert(latitude);
}

navigator.geolocation.getCurrentPosition(  
    function (position) {
      latitude = position.coords.latitude;
      longitude = position.coords.longitude;
      alert(longitude)
      accuracy = position.coords.accuracy;
      altitudeAccuracy = position.coords.altitudeAccuracy;
      heading = position.coords.heading;
      speed = position.coords.speed;
      nextStep();
    }
);

答案 1 :(得分:1)

getCurrentPosition是一个异步调用

在javascript中,并发使用“运行到完成”模型。这意味着当前函数中的所有代码在进入下一个执行上下文之前都将完成。在原始代码中,代码将按以下顺序执行:

  • 变量定义
  • getCurrentPosition已初始化
  • 警报(纬度)
  • 脚本完成

然后它将继续执行下一个执行上下文并运行您的回调函数,此时将设置变量并运行另一个警报。如果要确保首先设置变量

,则需要在回调中运行警报