这里我有一个函数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
如何在全局变量中显示此开始和结束纬度,经度数据以用于其他功能?
更新:我真正需要的是使用功能路线获得已建立标记的位置()如何做:
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);
}
});
}
答案 0 :(得分:1)
在任何编程语言中使用全局变量通常都不是一个好主意,包括javascript。理想情况下,您应该声明要在函数内部和外部作用域上的其他函数中访问的变量。
例如,假设您的代码是这样的。
var valueOne;
function setValue(){
valueOne = 3;
}
function readValue(){
console.log(valueOne);
}
setValue();
readValue();
将记录&#34; 3&#34;只有在readValue之前调用setValue时。在这种情况下,您必须100%确定变量是在包含这两个函数的作用域中声明的,并且它们是按该顺序调用的。
另一种方法是,调整自己的代码,使用window.startLocation,window.endLocation等,这会将你的变量附加到窗口对象,使它们全局可用。默认情况下,在javascript中使用不带前置var
(var startLocation
)的变量应该使其成为全局变量,但如果不起作用,则可以尝试直接将其附加到窗口对象。在任何情况下,你必须确保的是,设置要记录在另一个函数中的值的函数在另一个函数之前被调用,如果它没有显然不会被设置的值
答案 1 :(得分:-1)
startLocation是此函数的局部变量。您需要从此处返回它以从其他功能访问。或者,使用类范围。阅读任何关于javascript的标准书籍。你也可以把它变成全球性的,但我不推荐它。