Javascript函数变量作用域传递地理位置

Javascript函数变量作用域传递地理位置,javascript,variables,geolocation,scope,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.geolocat

我只是想从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);

纬度;
var经度;
var准确性;
海拔高度;
变异高度准确性;
风险值标题;
无功转速;
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(
职能(职位){
纬度=位置坐标纬度;
经度=position.coords.longitude;
警报(经度)
精度=位置坐标精度;
altitudeAccuracy=position.coords.altitudeAccuracy;
航向=position.coords.heading;
速度=位置.坐标.速度;
}
);
}
//警报(纬度);

这里我看到
警报(经度)
返回一个数值。但是,当我对该行进行注释并取消注释
警报(纬度)
——我会得到一个“未定义”警报


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

因为
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();
    }
);

因为
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();
    }
);

getCurrentPosition是一个异步调用

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

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

然后它将转到下一个执行上下文并运行回调函数,此时将设置变量并运行另一个警报。如果要确保变量已首先设置,则需要在回调中运行警报

getCurrentPosition是一个异步调用

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

  • 变量定义
  • getCurrentPosition已初始化
  • 警报(纬度)
  • 脚本完成
然后它将转到下一个执行上下文并运行回调函数,此时将设置变量并运行另一个警报。如果要确保先设置变量,则需要在回调中运行警报