Javascript Can';t从该代码中获取lat和lng

Javascript Can';t从该代码中获取lat和lng,javascript,Javascript,为什么我不能用这个代码得到坐标 错误为:ReferenceError:找不到变量:card\u Latitude 我从这里获取代码: 我不明白为什么 <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> <sc

为什么我不能用这个代码得到坐标

错误为:
ReferenceError:找不到变量:card\u Latitude

我从这里获取代码:

我不明白为什么

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>
    var card_FullAddress = "Canada";

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({
        'address': card_FullAddress
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var card_Latitude = results[0].geometry.location.lat();
            var card_Longitude = results[0].geometry.location.lng();
        } else {
            var card_Latitude = "ERR";
            var card_Longitude = "ERR";
        }
    });

    console.log(card_Latitude);
    console.log(card_Longitude);
</script>

var card_FullAddress=“加拿大”;
var geocoder=new google.maps.geocoder();
地理编码({
“地址”:卡的完整地址
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
var card_LATIONE=结果[0]。几何体。位置。纬度();
var card_longide=results[0]。geometry.location.lng();
}否则{
var卡_lation=“ERR”;
var card_Longitude=“ERR”;
}
});
控制台日志(卡片纬度);
控制台日志(卡片经度);

因为
卡纬度
是回调函数的本地值。如果仔细观察,您会注意到您将
console.log
放在回调之外。下面是一个更简单的例子:
函数foo(){var bar=42;};控制台日志(bar)。您似乎不熟悉异步代码,因此我建议您阅读以下内容:
card\u Latitude
存在于不同的作用域中。那么如何在外部访问它呢?我试图删除
var
,但还是出现了同样的错误。另外:欢迎来到异步编程的世界。如果需要,我如何在外部访问它们?简短回答;你不能。相反,您可以使用一个lib来让代码更清晰,避免回调地狱。您应该在google/StackOverflow上搜索JavaScript异步代码和回调以获得更详细的解释。@Bonito:您可以在更高的范围内声明变量,例如在全局范围内。异步代码的问题不在于范围,而在于时间。即使您使变量全局可用,您也不会在变量赋值时使用它们。您只知道何时调用回调。鉴于这种不确定性,将这些变量设置为全局变量没有多大用处。你真的应该花些时间阅读你在问题评论中得到的所有链接,以便更好地理解整个主题。@Felix Kling是对的!即使在更高的范围内声明它们,在调用回调之前也无法正确填充它们的值back@Felix克林:谢谢你的澄清。
var card_FullAddress = "Canada";

var geocoder = new google.maps.Geocoder();
geocoder.geocode({
    'address': card_FullAddress
}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        var card_Latitude = results[0].geometry.location.lat();
        var card_Longitude = results[0].geometry.location.lng();

        //Lat and long are only available in this scope! continue your code here!
        console.log(card_Latitude);
        console.log(card_Longitude);
    } else {
        var card_Latitude = "ERR";
        var card_Longitude = "ERR";
    }
});