0

在这里我有一个功能route();

function route() {
      // Clear any previous route boxes from the map
      clearBoxes();

      // Convert the distance to box around the route from miles to km
      distance = parseFloat(document.getElementById("distance").value) * 1.609344;

      var request = {
        origin: document.getElementById("from").value,
        destination: document.getElementById("to").value,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
      }
      if (status == google.maps.DirectionsStatus.OK) {
  directionsRenderer.setDirections(result);
  var route = response.routes[0];
  startLocation = new Object();
  endLocation = new Object();

  var path = response.routes[0].overview_path;
  var legs = response.routes[0].legs;
  for (i=0;i<legs.length;i++) {
    if (i == 0) { 
      startLocation.latlng = legs[i].start_location;
      startLocation.address = legs[i].start_address;
    }
    endLocation.latlng = legs[i].end_location;
    endLocation.address = legs[i].end_address;
  }
      }
      // Make the directions request
      directionService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          directionsRenderer.setDirections(result);

          // Box around the overview path of the first route
          var path = result.routes[0].overview_path;
          var boxes = routeBoxer.box(path, distance);
          drawBoxes(boxes);
        } else {
          alert("Directions query failed: " + status);
        }
      });
    }

此功能在两个地方之间创建路线方向并在地图上放置 2 个标记(起点标记和终点标记)

现在我想在其他函数中使用这个标记位置并在 console.log 中显示以查看我的代码发生了什么。

我尝试:

console.log(startLocation.latlng);

但后来我进入控制台:

ReferenceError: startLocation is not defined
get stack: function () { [native code] }
message: "startLocation is not defined"
set stack: function () { [native code] }
__proto__: Error

如何在全局变量中显示此开始和结束纬度、经度数据以在其他函数中使用?

更新:我真正需要的是使用功能 Route() 获得已经创建的标记的位置如何做到这一点:

function route() {
      // Clear any previous route boxes from the map
      clearBoxes();

      // Convert the distance to box around the route from miles to km
      distance = parseFloat(document.getElementById("distance").value) * 1.609344;

      var request = {
        origin: document.getElementById("from").value,
        destination: document.getElementById("to").value,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
      }

      // Make the directions request
      directionService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          directionsRenderer.setDirections(result);

          // Box around the overview path of the first route
          var path = result.routes[0].overview_path;
          var boxes = routeBoxer.box(path, distance);
          drawBoxes(boxes);
        } else {
          alert("Directions query failed: " + status);
        }
      });
    }
4

2 回答 2

1

在任何编程语言(包括 javascript)中使用全局变量通常不是一个好主意。理想情况下,您应该在函数内部和外部范围的其他函数中声明要访问的变量。

例如,假设您的代码是这样的。

var valueOne;
function setValue(){
    valueOne = 3;
}
function readValue(){
    console.log(valueOne);
}
setValue();
readValue();

只有在 readValue 之前调用 setValue 时才会记录“3”。在这种情况下,您必须 100% 确定该变量是在包含这两个函数的范围内声明的,并且它们是按该顺序调用的。

另一种方法,调整您自己的代码,将使用 window.startLocation、window.endLocation 等,这会将您的变量附加到窗口对象,使它们全局可用。默认情况下,在 javascript 中使用不带前缀var( var startLocation) 的变量应该使其成为全局变量,但如果这不起作用,那么您可以尝试直接将其附加到窗口对象。在任何情况下,您必须确保设置要在另一个函数中使用的值的函数在另一个函数之前被调用,如果不是,则显然不会设置这些值。

于 2013-09-20T14:43:05.770 回答
-1

startLocation 是此函数的局部变量。您需要从此处返回它以从其他功能访问。或者,使用类范围。为此,请阅读任何有关 javascript 的标准书籍。你也可以让它全球化,但我不推荐它。

于 2013-09-20T14:30:04.797 回答