Javascript更改全局变量的值

时间:2013-12-02 04:23:26

标签: javascript

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);
          }
        });

我正在尝试更改全局变量纬度和经度的值但不能。我已经查找了为函数内部的全局变量赋值的方法,我认为我正在做那个部分。但显然我有些遗漏。请帮忙。

3 个答案:

答案 0 :(得分:1)

function(results, status){ ... }位是异步回调

您可能遇到的问题是,您在实际设置之前尝试访问longitudelatitude

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

// 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);

  // ...

});

这样,您也可以跳过外部范围内的latitudelongitude。非常方便!

答案 1 :(得分:0)

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

喜欢:窗口。纬度和window.longitude

尝试更改值的函数是异步回调函数,可能存在在该范围内定义的同名的局部变量。

将它附加到窗口应该可以帮助你解决这个问题。

答案 2 :(得分:0)

试试这段代码:

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);
          }
        });

如果这样可以正常工作,那么答案可能是全局 正确设置,但是在其他代码尝试使用它们时,它们根本就没有设置。

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