Javascript无法访问函数外的全局变量

时间:2018-04-12 12:42:00

标签: javascript google-maps

我正在使用谷歌地图地理编码从地址获取纬度,经度值。这是我的代码,

@Override
public int hashCode() {
  return this.name.hashCode()
}

在函数外部访问变量<template> ... </template> <script> export default { name: 'animated-page', watch: { '$route' (to, from) { // conditionally choose animations depending on route const toDepth = to.path.split('/').length const fromDepth = from.path.split('/').length this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left' } } } </script> <style> ... my animations </style> 时,其值似乎为<template> ... </template> <script> export default { // somehow inherit from BasePage name: 'about-page', ... 'about' specific code } </script> <style> </style> 。上面的代码有什么问题?

UPDATE1:

var latd;
var lond;
geocoder.geocode({ 'address': address }, function (results, status) {

    if (status == google.maps.GeocoderStatus.OK) {
       console.log(place);
       var latd = results[0].geometry.location.lat();
       var lond = results[0].geometry.location.lng();
     }
    console.log(latd);
});
//console.log(latd);

2 个答案:

答案 0 :(得分:1)

首先,因为您尝试访问条件的变量只能在上下文中访问。您重新声明的变量if是新变量。

if (status == google.maps.GeocoderStatus.OK) {
   console.log(place);
   var latd = results[0].geometry.location.lat();
   var lond = results[0].geometry.location.lng();
   console.log(latd, lond)
}

你可以改变:

var latd;
var lond;
geocoder.geocode({ 'address': address }, function (results, status) {

   if (status == google.maps.GeocoderStatus.OK) {
      console.log(place);
      latd = results[0].geometry.location.lat();
      lond = results[0].geometry.location.lng();
   }
   console.log(latd);
});

<强>更新

geocoder.geocode是一个异步函数。你必须等到它完成。 即使地理编码器尚未完成执行,执行geocoder.geocod后的变量也是如此。因此,您的变量始终未定义,因为您创建了一个具有未定义值的变量。

注意:您的所有操作都应该放入地理编码器的回调函数中,否则,它将始终未定义。

答案 1 :(得分:1)

如果你想要访问lat,那么在函数外面很长时间只需分配它们,不要在里面创建它们。您可以阅读有关JavaScript Scope

的更多信息
    var latd;
    var lond;
     geocoder.geocode({ 'address': address }, function (results, status) {

        if (status == google.maps.GeocoderStatus.OK) {
            console.log(place);
            latd = results[0].geometry.location.lat();
            lond = results[0].geometry.location.lng();
         }
      console.log(latd);
     });
     //console.log(latd);