我试图遍历一个集合并尝试在循环中设置一个全局变量。由于某种原因,循环在其他代码完成执行后执行。
示例
在ready函数之外声明是
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)
执行。
答案 0 :(得分:1)
这是因为地图以异步方式加载。 “当地图完全初始化(带边界)时,它将触发'init'事件。” source
因此,您的第一个输出是底部console.log,结果为opp
。稍后,将加载映射,并在执行回调匿名函数时触发init事件。该函数使用定义的each
循环进行迭代并输出其结果。这就是为什么你看到事件发生的顺序。
如果需要在init之后执行代码,请考虑在init的回调中调用的函数中执行该代码。