在javascript中for循环的每次迭代中声明一个新的唯一变量的好方法是什么?

时间:2012-06-13 15:57:13

标签: javascript google-maps

我有以下for循环:

for (loc in locations){
    var newLoc = locations[loc].split(", ")
    var uniquevar = new google.maps.Marker({
    position: new google.maps.LatLng(newLoc[0], newLoc[1]),
        map: map,
        title: loc
    });
    google.maps.event.addListener(loc, 'click', function() {
        console.log(loc);
    });
};

当你点击它们时,我不想生成一堆map-markers和console.log它们的名字(loc)。但是他们最终都在控制台。记录位置日志中的最后一项。

我认为这是因为它们都被命名为相同的东西

为什么会这样,我该怎么办呢?

2 个答案:

答案 0 :(得分:4)

如上所述,你需要关闭:

for (loc in locations){
  (function(loc){  
    var newLoc = locations[loc].split(", ")
    var uniquevar = new google.maps.Marker({
      position: new google.maps.LatLng(newLoc[0], newLoc[1]),
      map: map,
     title: loc
    });

    google.maps.event.addListener(loc, 'click', function() {
      console.log(loc);
    });
  })(loc);
};

答案 1 :(得分:0)

您需要创建closure。通过创建一个闭包,你可以在执行时有效地'烘焙'内部函数的状态,这与触发'click'处理程序的时间不同。

编辑:删除了可怕的代码 - 使用Nayjest上面更清晰的解决方案!