2

我正在尝试遍历一个集合并尝试在循环中设置一个全局变量。由于某种原因,循环在其他代码完成执行后执行。

样本

在就绪函数之外声明的是

var lt1,lt2; 

循环

lt1="opp";
$('#map_block').gmap().bind('init', function(ev, map) {
    $.each(places,function(i, val) {
        lt2 = val['h_longitude'];   
        lt1 = (val['h_latitude']);
        clientPosition1 = new google.maps.LatLng(val['h_latitude'], val['h_longitude']);  
        console.log(lt1);
        $('#map_block').gmap('addMarker', {'position': clientPosition1 , 'bounds': false, 'icon':hicon }).click(function() {$('#map_block'). gmap('openInfoWindow', {'content':' Test'});
    });
});
console.log(lt1);

控制台显示如下

opp
41.222
42.4455
43.5566

似乎循环在最后执行代码之后执行console.log(lt1)

4

1 回答 1

1

这是因为地图是异步加载的。“当地图完全初始化(有边界)时,它将触发'init'事件。” 来源

结果,您的第一个输出是底部的 console.log ,结果为opp. 稍后,地图被加载,并触发 init 事件,执行回调匿名函数。该函数使用定义的each循环进行迭代并输出其结果。这就是为什么你会看到事件发生的顺序。

如果您需要在 init 之后执行代码,请考虑在 init 回调中调用的函数中执行该代码。

于 2013-04-12T02:31:11.787 回答