【问题标题】:Does javascript make a copy of a variable when it is passed to a function? [duplicate]javascript 在将变量传递给函数时是否会对其进行复制? [复制]
【发布时间】:2013-05-25 17:21:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript google-maps-api-3


    【解决方案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));
    }
    

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

    【讨论】:

    • 您的方法似乎不适用于我的代码。不过,我真的很感谢你的帮助:)。谢谢。
    • 总的成功仍然取决于你写什么来替换占位符“用 `polygon” 在这里做事。
    • 如果我将do stuff here 复制到一个新函数,同样的工作。不过,我会再次尝试您的解决方案
    猜你喜欢
    • 2017-07-24
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多