访问函数外的变量值

时间:2018-05-08 02:00:26

标签: javascript scope global-variables

我的脚本中有2个函数。函数#1的目的是生成一个名为“mapsURL”的URL

第二个功能的目的是使用“mapsURL”

运行.ajax请求

但是我在第二个函数中访问“mapsURL”时遇到问题。我在第一个函数中声明了“mapsURL”而没有“var”。根据我的理解,这应该使这个值成为全局值,我应该能够在其他函数中访问它。我的理解不正确还是我在这里缺少什么?

这是我的js:

注意:我删除了此帖子的API密钥,因此不是问题

$(document).ready(function (){


  navigator.geolocation.getCurrentPosition(function (position) {
     var positionLat = position.coords.latitude
     var positionLon = position.coords.longitude
     mapsURL = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + positionLat + "," + positionLon + "&key=***mykeygoeshere***";
  });


 function getData (){
   $.ajax({
     url: mapsURL,
     dataType: 'json',
     success: function(response){
      console.log(response);
     }
    });
  };

  getData();

});

1 个答案:

答案 0 :(得分:4)

getCurrentPosition是异步的。它没有立即分配给mapsURL,因此当您同步拨打getData 时,mapsURL尚未填充。

您应该在getData回调中调用getCurrentPosition - 这也可以避免使用全局变量:

$(document).ready(function() {
  navigator.geolocation.getCurrentPosition(function(position) {
    var positionLat = position.coords.latitude
    var positionLon = position.coords.longitude
    var mapsURL = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + positionLat + "," + positionLon + "&key=***mykeygoeshere***";
    getData(mapsURL);
  });
  function getData(mapsURL) {
    $.ajax({
      url: mapsURL,
      dataType: 'json',
      success: function(response) {
        console.log(response);
      }
    });
  }
});