首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从地理编码循环外部访问数组

从地理编码循环外部访问数组
EN

Stack Overflow用户
提问于 2012-11-28 20:15:34
回答 2查看 1.5K关注 0票数 2

我已经设法对多达10个地址进行了地理编码,并向地图添加了一个标记,但我需要在geocode (codeAddress)函数之外访问地理编码结果。我认为我可以将结果推送到全局变量数组(userLat,userLng)中。使用警报,我可以看到循环确实将结果添加到函数内的数组中,但在函数外数组是没有价值的。

也许这些问题是相关的?我认为这可能与我对嵌套函数缺乏理解有关。

我希望这一点是清楚的。提前感谢您的帮助!

代码语言:javascript
运行
复制
   function codeAddress() {

    var useradd = [];
    var geocoder = new google.maps.Geocoder();
    var howmany = parseFloat(document.getElementById("howmany").value);

    for (var i=0; i<howmany; i++) {
        useradd[i] = document.getElementById('address['+i+']').value;
        geocoder.geocode( {address: useradd[i]}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
                userLat.push(parseFloat(results[0].geometry.location.lat()));
                userLng.push(parseFloat(results[0].geometry.location.lng()));
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });
            } 
            else {
                alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
            }
        });
    };
}

编辑:

我不确定我是否理解正确,但是已经提取了回调函数并创建了一个新的函数,该函数由地理编码器调用。问题仍然是一样的,变量userLat和userLng没有被带到循环之外。有什么建议吗?

函数codeAddress() {

代码语言:javascript
运行
复制
function callBack() {
    return function(results, status){
        if (status == google.maps.GeocoderStatus.OK) {
        userLat.push(parseFloat(results[0].geometry.location.lat()));
        userLng.push(parseFloat(results[0].geometry.location.lng()));
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });
        } 
        else {
            alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
        }
    }
}    

    var userLat = [];
            var userLng = [];
    var useradd = [];
    var geocoder = new google.maps.Geocoder();
    var howmany = parseFloat(document.getElementById("howmany").value);

    for (var i=0; i<howmany; i++) {
        useradd[i] = document.getElementById('address['+i+']').value;
        geocoder.geocode({address: useradd[i]}, callBack());
    };
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-28 20:27:16

当您的codeAddress函数返回时,geocoder.geocode仍然在做它的工作,这是异步的。当geocoder.geocode完成时,它将调用它的回调,您将该回调作为匿名函数传递。

我建议的解决方案是使回调函数成为codeAddress的参数,并从该回调(或从在回调中调用的其他函数)中执行所需的任何操作,而不是使用全局变量方法。

票数 0
EN

Stack Overflow用户

发布于 2012-11-28 20:29:17

这一切都与Javascript中的作用域有关。如果要访问函数外部的变量,则必须在函数作用域之外声明和创建变量,然后更新它们。

在函数作用域之外声明的变量将在脚本中的任何其他位置可用。

代码语言:javascript
运行
复制
 var def = "bombshell";
 function changer(){
     def = "changed value";
 }
 changer();
 alert(def);

请在此处查看- http://jsfiddle.net/daveheward/kWn8b/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13604851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档