Javascript更改全局变量的值

Javascript更改全局变量的值,javascript,Javascript,我试图更改全局变量纬度和经度的值,但无法更改。我已经找到了在函数中为全局变量赋值的方法,我认为这一部分做得不错。但很明显,我遗漏了一些东西。请提供帮助。函数(结果、状态){…}位是一个异步回调 您可能遇到的问题是,您试图在实际设置经度和纬度值之前访问它们 要确认这一点,请将回调修改为以下内容 var longitude=1; var latitude=1; var geocoder = new google.maps.Geocoder(); geocoder.geocode( { '

我试图更改全局变量纬度和经度的值,但无法更改。我已经找到了在函数中为全局变量赋值的方法,我认为这一部分做得不错。但很明显,我遗漏了一些东西。请提供帮助。

函数(结果、状态){…}位是一个异步回调

您可能遇到的问题是,您试图在实际设置
经度
纬度
值之前访问它们

要确认这一点,请将回调修改为以下内容

var longitude=1;
var latitude=1;

var geocoder =  new google.maps.Geocoder();
    geocoder.geocode( { 'address': Position}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            alert(results[0].geometry.location.lat());
            alert(results[0].geometry.location.lng());
            latitude = results[0].geometry.location.lat();
            longitude = results[0].geometry.location.lng();
            //alert("location : " + results[0].geometry.location.lat() + " " +results[0].geometry.location.lng()); 
          } else {
            alert("Something got wrong " + status);
          }
        });
你应该好好看看他们。一旦你有了这个功能,你可以完全跳过它们,做类似的事情

// where you have these two lines
latitude = results[0].geometry.location.lat();
longitude = results[0].geometry.location.lng();

// add this line after
console.log(latitude, longitude);

这样,您也可以跳过外部范围中的
纬度
经度
。非常方便

我建议您将这两个变量附加到全局窗口对象

比如:窗户。经纬度

而试图更改值的函数是一个异步回调函数,在该范围内可能定义了具有相同名称的局部变量

将其附加到窗口可以让您避免这种可能性。

尝试以下代码:

function doSomething(lat, lng) {
  console.log(lat, lng);
}

geocoder.geocode( { 'address': Position}, function(results, status) {

  // ...
  var loc = results[0].geometry.location,
      lat = loc.lat(),
      lng = loc.lng();

  doSomething(lat, lng);

  // ...

});
如果这是正确的,那么答案可能是globals的设置是正确的,但是在其他代码尝试使用它们时,它们还没有被设置


如果出现这种情况,则意味着任何依赖lat/long的代码都需要等待,直到地理代码回调完成并接收到数据。

警报给出了正确的结果,但这些值没有被分配到纬度和经度。是的,这确实是个问题。我需要放置一些延迟函数来等待赋值吗?你不需要人为地延迟任何东西,但是你需要确保你调用的任何函数都在Google Maps回调中被调用。
var longitude=1;
var latitude=1;

var geocoder =  new google.maps.Geocoder();
    geocoder.geocode( { 'address': Position}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {         
            latitude = results[0].geometry.location.lat();
            longitude = results[0].geometry.location.lng();
            alert(latitude + ', ' + longitude) // show the value of the globals
          } else {
            alert("Something got wrong " + status);
          }
        });