简单的javascript for循环没有按照我认为的方式运行

simple javascript for loop not behaving the way I think it should

本文关键字:方式 运行 for javascript 循环 简单      更新时间:2023-09-26
for (var i=0; i<Gmaps.map.markers.length; i++) {
  google.maps.event.addListener(Gmaps.map.markers[i].serviceObject, 'click', function(object){
    alert(Gmaps.map.markers[i]); 
  });
};

所以,这个通过循环。我在谷歌地图API中使用这个。地图上的每个标记都附有警报。警报显示了undefined。如果我将它切换到alert(Gmaps.map.markers[0]);或任何其他适用的数字,它会显示给我Object对象,就像它应该的那样。如果我然后调用alert(Gmaps.map.markers[i].id);或类似的,我得到我正在寻找的值,但显然,每个标记给出相同的警报。

为什么在回调中不能识别i ?

你必须私有化i:

for (var i=0; i<Gmaps.map.markers.length; i++) {
 (function(i){
  google.maps.event.addListener(Gmaps.map.markers[i].serviceObject, 'click', function(object){
    alert(Gmaps.map.markers[i]); 
  });
 }(i));
};