Javascript 循环内的变量对于所有迭代具有相同的值

Javascript 循环内的变量对于所有迭代具有相同的值,javascript,google-maps,for-loop,Javascript,Google Maps,For Loop,在下面的代码中,内部for循环变量“i”对于所有迭代似乎都具有值5。我做错了什么? 代码: var message=['1','5','7','9','8']; var loc=[“莫斯科”、“德里”、“纽约”、“东京”、“巴塞罗那”]; var geocoder=new google.maps.geocoder(); var i=0; 函数初始化() { var-p; var mapOptions={zoom:4,center:new google.maps.LatLng(22,75)};

在下面的代码中,内部for循环变量“i”对于所有迭代似乎都具有值5。我做错了什么? 代码:

var message=['1','5','7','9','8'];
var loc=[“莫斯科”、“德里”、“纽约”、“东京”、“巴塞罗那”];
var geocoder=new google.maps.geocoder();
var i=0;
函数初始化()
{
var-p;
var mapOptions={zoom:4,center:new google.maps.LatLng(22,75)};
var map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
对于(i=0;i<5;i++)
{
geocoder.geocode({'address':loc[i]},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK)
{
map.setCenter(结果[0].geometry.location);
var marker=new google.maps.marker({
地图:地图,
位置:结果[0]。几何体。位置
});
}
attachSecretMessage(标记,i);
});
}
}
函数attachSecretMessage(标记,num)
{
var infowindow=new google.maps.infowindow({
内容:消息[num]
});
google.maps.event.addListener(标记'click',函数(){
打开(marker.get('map'),marker);
});
}
google.maps.event.addDomListener(窗口“加载”,初始化);

发生这种情况是因为您在回调中使用了变量i。因此,首先for循环执行午餐请求,导致var i变为5,然后执行回调函数

一个可能的解决办法是:

var p;
var readyRequests = 0;
var mapOptions = {zoom: 4, center: new google.maps.LatLng(22,75)};

var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

for (i = 0; i < 5; i++)
{
  geocoder.geocode({'address': loc[i]}, function(results, status){
    if(status == google.maps.GeocoderStatus.OK)
    {
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location
      });
    }
    attachSecretMessage(marker, readyRequests);
    readyRequests++;
  });
}
var-p;
var readyRequests=0;
var mapOptions={zoom:4,center:new google.maps.LatLng(22,75)};
var map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
对于(i=0;i<5;i++)
{
geocoder.geocode({'address':loc[i]},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK)
{
map.setCenter(结果[0].geometry.location);
var marker=new google.maps.marker({
地图:地图,
位置:结果[0]。几何体。位置
});
}
attachSecretMessage(标记、readyRequests);
readyRequests++;
});
}
一句话,异步!搜索“循环结束”,你会发现很多答案,告诉你问题是什么,该怎么做。
var p;
var readyRequests = 0;
var mapOptions = {zoom: 4, center: new google.maps.LatLng(22,75)};

var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

for (i = 0; i < 5; i++)
{
  geocoder.geocode({'address': loc[i]}, function(results, status){
    if(status == google.maps.GeocoderStatus.OK)
    {
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location
      });
    }
    attachSecretMessage(marker, readyRequests);
    readyRequests++;
  });
}