Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当变量传递给函数时,javascript会复制它吗?_Javascript_Google Maps Api 3 - Fatal编程技术网

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

当变量传递给函数时,javascript会复制它吗?,javascript,google-maps-api-3,Javascript,Google Maps Api 3,您好,我有一个名为regionPolygons的谷歌地图多边形数组。现在我希望每次单击多边形时,我的贴图都将其中心设置为多边形的中心。 下面是我如何实现它的 for (i = 0; i < regionPolygons.length; i++) { google.maps.event.addListener(regionPolygons[i], 'click', function () { // do the stuff, things seem

您好,我有一个名为
regionPolygons
的谷歌地图多边形数组。现在我希望每次单击多边形时,我的贴图都将其中心设置为多边形的中心。 下面是我如何实现它的

for (i = 0; i < regionPolygons.length; i++) {
  google.maps.event.addListener(regionPolygons[i], 'click', function () {                
    // do the stuff, things seem ok here
  }
}
for(i=0;i
现在,无论单击哪个多边形,我都会被带到最后一个多边形的中心。 我怎样才能让谷歌地图现在点击哪个多边形? 多谢各位


编辑:我的问题是重复的。似乎将相同的代码复制到新函数是可行的。当变量从主程序传递到子程序时,Javascript似乎会创建新的变量副本。有人能帮我解释一下吗?

谷歌将单击的多边形与在事件处理程序中作为
this
或作为
event.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;iIt似乎您的方法对我的代码不起作用。不过,我真的很感谢您的帮助:)。谢谢。完全的成功仍然取决于您编写了什么来替换占位符“do stuff here with`polygon”。如果我将这里的
do stuff
复制到一个新函数中,同样的事情也会发生。不过,我会再次尝试您的解决方案
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));
}