当javascript传递给函数时,它是否会复制变量?

时间:2013-05-25 17:21:41

标签: javascript google-maps-api-3

您好我有一个名为regionPolygons的Google地图多边形数组。现在我希望每次单击多边形时,我的地图都会将其中心设置为多边形的中心。 这是我实现它的方式。

for (i = 0; i < regionPolygons.length; i++) {
  google.maps.event.addListener(regionPolygons[i], 'click', function () {                
    // do the stuff, things seem ok here
  }
}

现在无论我点击哪个多边形,我都会被带到最后一个多边形的中心。 如何让谷歌现在映射哪个多边形被点击? 谢谢

修改:我的问题是重复的。似乎将相同的代码复制到新的功能工作。似乎Javascript在从主程序传递到子程序时创建变量的新副本。任何人都可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:1)

Google将点击的多边形作为thisevent.target提供给事件处理程序是明智的,但API文档没有提供实际完成的线索。一定要试试。

如果这些建议都不起作用,那么您可以利用闭包来保留i的副本,如下所示:

for(var i=0; i<regionPolygons.length; i++) {
    google.maps.event.addListener(regionPolygons[i], 'click', (function(i) {
        return function() {
            var polygon = regionPolygons[i];
            //do stuff here with `polygon`
        };
    })(i));
}

或者,您可以使用相同的技术来保持对多边形对象本身的引用:

for(var i=0; i<regionPolygons.length; i++) {
    var p = regionPolygons[i];
    google.maps.event.addListener(p, 'click', (function(polygon) {
        return function() {
            //do stuff here with `polygon`
        };
    })(p));
}

净效果是一样的;在事件处理程序中,您最终会得到对单击多边形的引用。